epoch函数输出中的monetdb-timezone差异(将int转换为datetime格式)

时间:2013-04-25 07:15:18

标签: sql timezone epoch monetdb

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”

1 个答案:

答案 0 :(得分:1)

对MonetDB一无所知,但对时区有很多了解,我决定查看他们的文档,看看支持哪种数据类型以及如何处理转换。

我找到了this page on Temporal data types。基于此,我可以得出结论,MonetDB中的timestamp始终用于引用UTC / GMT时间 - 这与其他系统一致。

为了获得特定时区的值,他们提供以下示例:

SET TIME ZONE INTERVAL '1' HOUR TO MINUTE

我认为这意味着将数据库设置为偏移所有时间1小时,实际上将值全部放在UTC+01:00中,例如英国夏令时的偏移量。

该页面还指出了使用just和offset来调整时间值时可能出现的问题(参见the TimeZone tag wiki中的TimeZone!= Offset)。它还提供了各种指定时区的列表。但它没有显示如何将时区设置为其中一个命名值。此外,他们的列表似乎是专有的,并且不完整。乍一看,它们似乎与IANA / Olson时区数据库有相似之处 - 它们指定的标识符不是有效的TZDB名称。

此页面上列出了一些其他功能,但没有太多解释。一个看起来很有需要的是LOCALTIMESTAMP。也许这会将当地时区考虑在内,这似乎是您所寻找的。

我找不到特定于MonetDB日期/时间/时区处理的任何其他详细信息。文档似乎相当不完整。您可能想要联系他们的邮件列表。