1

C#我有一个来自(.NETepoch:)的输入时间戳00:00:00 (midnight), January 1, 0001,我想在Ruby世界(Unixepoch:)中输出它00:00:00 UTC on 1 January 1970

输入时间戳在 中给出UTC,并从 .NET 的DateTime(Int64)派生,它是“日期和时间,以自 0001 年 1 月 1 日 00:00:00.000 公历中经过的 100 纳秒间隔数表示日历。

输入时间戳:634891434586852680

输出应该是太平洋标准时间下午 5 点之后的 2012 年 11 月 21 日。

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 intervalsseconds

的转换因子1e-71e2/1e9可以100/1000000000解释为:

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

intervals取消自己,就像 一样,nanoseconds我们只剩下seconds; 和100/1000000000 seconds1e2/1e9 seconds哪个是1e-7 seconds

于 2012-11-26T23:27:34.840 回答