1

hsqldb では、関数 TIMESTAMP ( ) は WITHOUT TIME ZONE タイムスタンプを返します。これは、さらに変換する前にセッションのタイム ゾーンに調整されます。

したがって、私のセッションが UTC+1 であり、UNIX タイムスタンプが 1364353339 (水、2013 年 3 月 27 日 03:02:19 GMT、http: //www.onlineconversion.com/unix_time.htm によると)であるとしましょう。 . 私が電話した場合:

VALUES( TIMESTAMP( 1364353339 ) AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE );

を与え2013-03-27 02:02:19.000000+0:00ます。これは正しい tz を持っていますが、実際の値は 1 時間未満です。

私が調べた他の可能性

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 に切り替えられた場合 (たとえば、 ) 、これらすべてが正しい値 ( または のいずれ2013-03-27 03:02:19+0:00か) を返します。2013-03-27 04:02:19+1:00SET TIME ZONE INTERVAL '0:00' HOUR TO MINUTE

これはビューフィールドに対して計算されているため、それを行うことはできません。実際のタイムスタンプは、テキスト テーブルのフィールドから取得されます。

4

1 に答える 1

0

これはおそらくすべてのタイムゾーンで機能します。

VALUES TIMESTAMP(1364353339) + SESSION_TIMEZONE()

これらの形式も可能です。

VALUES TIMESTAMP(1364353339) + DATABASE_TIMEZONE()
VALUES TIMESTAMP(1364353339) + TIMEZONE()

DATABASE_TIMEZONE() は、クライアント サーバー セットアップのセッションとは異なる場合があります。SET TIME ZONE が使用されている場合、TIMEZONE() は SESSION_TIMEZONE() とは異なる場合があります。

于 2013-03-30T01:08:49.153 に答える