2017-08-11 21 views
1

誰でも精度の高い時間変換を手助けできるかどうかは不思議でした。 サンプル:GMT:1501646399999 GMT:Wednesday、August 2、2017 3:59:59.999 AMエポックをOracleで日付に換算する

私は以下のクエリを使用しましたが、02-AUG-17 04:00:00に常に四捨五入しています。サブ秒の精度を持っていない - 誰もが

select TO_TIMESTAMP('1970-01-01 00:00:00.000', 'YYYY-MM-DD hh24:mi:SS.FF3') + ((1/86400000) * 1501646399999) 
from dual; 

答えて

0

問題はあなたがタイムスタンプが暗黙的に日付に変換することを引き起こしているあなたの固定のタイムスタンプに番号を追加しているということである私を導いてくださいすることができます。

select TIMESTAMP '1970-01-01 00:00:00' + numtodsinterval(...) 

ます。また、チェックすることをお勧めします:あなたは少しリテラル、タイムスタンプを使用してクエリを簡素化することができ、尚

alter session set nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'; 

select TO_TIMESTAMP('1970-01-01 00:00:00.000', 'YYYY-MM-DD hh24:mi:SS.FF3') 
    + numtodsinterval(1501646399999/1000, 'SECOND') 
from dual; 

TO_TIMESTAMP('1970-01-0 
----------------------- 
2017-08-02 03:59:59.999 

:あなたの代わりに、その後の間隔を追加する場合

は、それがタイムスタンプとしてとどまりますタイムスタンプをUTCとして宣言し、エポック値を追加した後にローカルタイムゾーンに変換する必要がある場合は、または明示的にUTCとして残しますが、タイムゾーン値を持つタイムスタンプとして残してください。それはその数字が何を表しているのかとはまったく関係があります。 (あなたはGMT/UTCだと言いましたが、それでも...)

+0

ありがとうございます。チャームのように働いた –

関連する問題