Timezone 如何从hsqldb中的unix时间戳中正确获取替换的UTC时间戳

Timezone 如何从hsqldb中的unix时间戳中正确获取替换的UTC时间戳,timezone,hsqldb,unix-timestamp,Timezone,Hsqldb,Unix Timestamp,在hsqldb中,函数TIMESTAMP()返回一个不带时区的时间戳,该时间戳在进一步转换之前会调整为会话的时区 假设我的会话是UTC+1,我的unix时间戳是136435339(周三,2013年3月27日03:02:19 GMT,根据),来自其他地方。如果我打电话: VALUES( TIMESTAMP( 1364353339 ) AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE ); 它给出了2013-03-27 02:02:19.000000+0:00

在hsqldb中,函数TIMESTAMP()返回一个不带时区的时间戳,该时间戳在进一步转换之前会调整为会话的时区

假设我的会话是UTC+1,我的unix时间戳是136435339(周三,2013年3月27日03:02:19 GMT,根据),来自其他地方。如果我打电话:

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(例如,
设置时区间隔“0:00”小时到分钟),则所有这些都会返回正确的值(无论是
2013-03-27 03:02:19+0:00
还是
2013-03-27 04:02:19+1:00


我不能这样做,因为这是为一个视图字段计算的。实际时间戳来自文本表上的字段。

这可能适用于所有时区:

VALUES TIMESTAMP(1364353339) + SESSION_TIMEZONE()
这些表格也可以是:

VALUES TIMESTAMP(1364353339) + DATABASE_TIMEZONE()
VALUES TIMESTAMP(1364353339) + TIMEZONE()
数据库_TIMEZONE()可以与客户端服务器设置中的会话不同。如果使用设置时区,则时区()可能与会话_TIMEZONE()不同