1

C#( .NETepoch: )からの入力タイムスタンプがあり、それを世界 ( epoch: )00:00:00 (midnight), January 1, 0001に出力したい。RubyUnix00:00:00 UTC on 1 January 1970

入力タイムスタンプは で与えられ、 .NET のDateTime(Int64)UTCから派生します。これは、「グレゴリオ暦で 0001 年 1 月 1 日 00:00:00.000 から経過した 100 ナノ秒間隔の数で表される日付と時刻です。カレンダー。

入力タイムスタンプ:634891434586852680

出力は 2012-NOV-21 午後 5 時 (太平洋標準時) の少し後であるはずです。

4

1 に答える 1

3
input =                         634891434586852680
UNIX_EPOCH_IN_100NS_INTERVALS = 621355968000000000

Time.at((input-UNIX_EPOCH_IN_100NS_INTERVALS)*1e-7).utc.getlocal
 => 2012-11-21 17:10:58 -0800

Ruby では、時間 はエポック (1970 年 1 月 1 日 00:00 UTC) からの分数付きの秒数として内部的に保存されます。したがって、 から100-nanosecond intervalsに変換する必要がありsecondsます。

の変換係数は1e-7次のよう1e2/1e9100/1000000000説明できます。

X intervals * 100ns/interval * 1s/1000000000ns

intervalsと同様にキャンセルされ、nanosecondsが残りsecondsます。と100/1000000000 seconds1e2/1e9 secondsです1e-7 seconds

于 2012-11-26T23:27:34.840 に答える