2008/01/08

Unix時刻とExcel時刻

Unixの時刻をExcelの時刻に変換する用があったので, 調べたときのメモ.


excel:
1900/1/0 00:00:00 が0でそこからの日数 (1月0日って存在しないけど) (JST)
存在しないはずの1900/2/29も存在する(1900/2/29 00:00:00は60.0000).
Lotus 1-2-3との互換性のためらしい.

unix(エポック秒):
1970/1/1 00:00:00 (エポック, epoch) が 0 でそこからの秒数 (UTC)
こちらにも1900/2/29が存在する.

UTCとJSTの時差9時間分の秒数: 60*60*9 = 32400
24時間分の秒数: 60*60*24 = 86400
1970/01/01 00:00:00のexcelでの値: 25569.0000 (1900/1/0からエポックまでの日数)

unix = (excel - 25569) * 86400 - 32400
1. Excelの時刻からエポックまでを引く
2. 1の単位を"日"から"秒"へ変換
3. 時差9時間を引く.

excel = unix / 86400 + 25569 + ( 32400 / 86400 )
1. Unixの時刻の単位を"秒"から"日"へ変換
2. 1の値に, 1900/1/0からエポックまでの日数を足す
3. 時差9時間を足す.

例:2000/1/1の場合

excelでは36526 → (36526 - 25569) * 86400 -32400 = 946652400

unixでは946652400 → (946652400 + 32400) / 86400 + 25569 = 36526

0 件のコメント: