【发布时间】:2013-03-20 17:17:31
【问题描述】:
在 hsqldb 中,函数 TIMESTAMP ( ) 返回一个 WITHOUT TIME ZONE 时间戳,该时间戳在进一步转换之前调整为会话的时区。
假设我的会话是在 UTC+1 并且我有一个来自其他地方的 1364353339(格林威治标准时间,2013 年 3 月 27 日星期三 03:02:19,根据 http://www.onlineconversion.com/unix_time.htm)的 unix 时间戳。如果我打电话:
VALUES( TIMESTAMP( 1364353339 ) AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE );
给出2013-03-27 02:02:19.000000+0:00。这具有正确的 tz,但实际值比应有的值少一小时。
我探索过的其他可能性
VALUES( TIMESTAMP( 1364353339 ) AT LOCAL ) --> 2013-03-27 03:02:19.000000+1:00
Value right, TZ wrong
VALUES CAST(TIMESTAMP(1364353339) AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE AS TIMESTAMP(0) WITH TIME ZONE); --> 2013-03-27 02:02:19+0:00
Value wrong, TZ right
VALUES CAST(TIMESTAMP(1364353339) AT LOCAL AS TIMESTAMP(0) WITH TIME ZONE) --> 2013-03-27 03:02:19+1:00
Value right, TZ wrong
如果会话的时区之前切换为 UTC(例如 SET TIME ZONE INTERVAL '0:00' HOUR TO MINUTE),所有这些都将返回正确的值(2013-03-27 03:02:19+0:00 或 2013-03-27 04:02:19+1:00)。
我不能这样做,因为这是针对视图字段计算的。实际时间戳来自文本表上的字段。
【问题讨论】:
标签: timezone hsqldb unix-timestamp