如何使用Ruby将Unix时代的时间从.net时代转换为时间?

时间:2012-11-26 23:25:51

标签: c# .net ruby unix-timestamp

我的输入时间戳来自C#.NET纪元:00:00:00 (midnight), January 1, 0001),我想在Ruby世界(Unix世纪{00:00:00 UTC on 1 January 1970世纪输出{} {1}})。

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

输入时间戳:634891434586852680

在太平洋标准时间下午5点之后输出应该是2012-NOV-21。

1 个答案:

答案 0 :(得分: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中,Time 在内部存储为自1970年1月1日00:00 UTC时代以来的分数秒。因此我们必须从{{1}转换} 100-nanosecond intervals

seconds的转换因子为1e-7 1e2/1e9,可以解释为:

100/1000000000

X intervals * 100ns/interval * 1s/1000000000ns 取消了自己,intervals就取消了,我们留下了nanoseconds; seconds100/1000000000 seconds1e2/1e9 seconds