Oracleのタイムスタンプでタイムゾーンを使用していましたが、今回は値を文字列として取得し、データベースにロードしようとしています。Oracleのto_timestamp_tzが間違った時刻および/またはタイムゾーンを返すのはなぜですか?
文字列を変換すると、データベースのタイムゾーンに値が入ります。これは奇妙ですが、それに応じて時間を調整しても実行可能です。以下を参照してください:
SELECT TO_CHAR(systimestamp AT TIME ZONE 'Canada/Pacific',
'HH24:MI:SS Mon DD, YYYY TZD') now_pst
, TO_CHAR(systimestamp AT TIME ZONE 'Canada/Eastern',
'HH24:MI:SS Mon DD, YYYY TZD') now_est
FROM DUAL
でもたらされる:TO_TIMESTAMP_TZ使用するようになりました
now_pst now_est
09:55:50 Dec 19, 2016 PST 12:55:50 Dec 19, 2016 EST
:
SELECT '09:55:50 Dec 19, 2016 PST' now_pst
, TO_TIMESTAMP_TZ('09:55:50 Dec 19, 2016 PST', 'HH24:MI:SS Mon DD, YYYY TZD') now_pst_tz
, '12:55:50 Dec 19, 2016 EST' now_est
, TO_TIMESTAMP_TZ('12:55:50 Dec 19, 2016 EST', 'HH24:MI:SS Mon DD, YYYY TZD') now_est_tz
FROM dual
結果:私が取得すべきか
now_pst now_pst_tz now_est now_est_tz
09:55:50 Dec 19, 2016 PST 19.12.2016 09:55:50.000 -05:00 12:55:50 Dec 19, 2016 EST 19.12.2016 12:55:50.000 -05:00
は次のとおりです。 NOW_PST_TZ = 2016年12月19日09:55:50.000 -08:00 (ない-05:00)
NOW_EST_TZ = 2016年12月19日12:55:50.000 -05:00
私は期待をたくさん持っていますここでは起こっていませんが、主にカナダ/東部とカナダ/パシフィックで同じ時期になるはずです。しかし、私は2つの異なる時間を得ています。
to_timestamp_tzは、文字列を正しいTZDに変換できません。要求されたとして
:
select sessiontimezone, dbtimezone from dual
結果:
SESSIONTIMEZONE DBTIMEZONE
-05:00 +00:00
あなたはこのクエリを実行できますか? – krokodilko
@krokodilko、値 'dbtimezone'から何を期待していますか? –
@Wernfried Domscheit 'systimestamp'関数は、データベースが存在するシステムのシステム日付を* system time zone *で返します。 'dbtimezone'関数は、このタイムゾーン(システムタイムゾーン)を返します。 'sessiontimezone'はセッションのタイムゾーンを返します。それらは相異なるものにすることができます(dbtimezoneとsessiontimezone)。 – krokodilko