我的输入时间戳来自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。
答案 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
; seconds
为100/1000000000 seconds
,1e2/1e9 seconds
。