Q1:我想将unix时间戳(INT)转换为monetdb时间戳('YYYY-MM-DD HH:MM:SS')格式但是显示的是GMT时间,而不是实际时间。
当我做
select (epoch(cast(current_timestamp as timestamp))-epoch(timestamp '2013-04-25 11:49:00'))
如果2013-04-25 11:49:00是我的系统当前时间,它会给出相同的差异
我试过使用
set time zone interval '05:30' HOUR TO MINUTE;
但是没有改变结果
如何解决这个问题??
例子的问题:我想转换unix时间戳1366869289,它应该在"2013-04-25 11:25:00"左右,但monetdb给出"2013-04-25 05:55:00"
对MonetDB一无所知,但对时区了解很多,我决定查看他们的文档,看看支持哪种数据类型以及如何处理转换。
我找到了这个关于时态数据类型的页面。基于此,我可以得出结论,MonetDB中的timestamp
总是打算引用UTC/GMT时间-这与其他系统一致。
为了获得特定时区的值,他们提供了以下示例:
SET TIME ZONE INTERVAL '1' HOUR TO MINUTE
我假设这意味着将数据库设置为将所有时间偏移1小时,有效地将值全部放在UTC+01:00
中,例如英国夏令时的偏移量。
该页面还指出了使用just和offset来调整时间值可能出现的问题(参见TimeZone标记wiki中的TimeZone != offset)。它还提供了各种已命名时区的列表。但是它没有显示如何将时区设置为其中一个命名值。此外,他们的列表似乎是专有的,不完整的。虽然乍一看,它们似乎与IANA/Olson时区数据库有相似之处——它们指定的标识符不是有效的TZDB名称。
本页还列出了一些其他的函数,没有太多的解释。一个看起来很有希望满足你需求的是LOCALTIMESTAMP
。也许这将考虑到当地时区,这似乎是您正在寻找的。
我找不到任何特定于MonetDB日期/时间/时区处理的额外细节。文件似乎相当不完整。你可以联系他们的邮件列表