2012-11-26 57 views
1

我有一個輸入時間戳C#.NET epoch:00:00:00 (midnight), January 1, 0001),我想輸出它在Ruby世界(Unix時代:00:00:00 UTC on 1 January 1970)。如何將.net時代的時間轉換爲Unix時代與Ruby的時間?

輸入時間戳在UTC給出,並且從NET的DateTime(Int64),這是「在自0001年1月1時起已經過00的100毫微秒的時間間隔的數目表示的日期和時間導出:00:00.000在公曆

的輸入時間戳:634891434586852680

輸出應爲2012-NOV-21位下午5點之後PST。

回答

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。因此我們必須從100-nanosecond intervals轉換爲seconds

1e-7的轉換因子是1e2/1e9它是100/1000000000能夠作爲這樣解釋:

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

intervals取消自己出,因爲這樣做的nanoseconds,和我們留下seconds;和100/1000000000 seconds1e2/1e9 seconds,它是1e-7 seconds

相關問題