我想将 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 日期/时间/时区处理的其他详细信息。该文档似乎相当不完整。您可能想联系他们的邮件列表。