strftime を使って Python の datetime をエポックに変換する 質問する

strftime を使って Python の datetime をエポックに変換する 質問する

エポックからの秒数を知りたい UTC の時刻があります。

strftime を使用して秒数に変換しています。2012 年 4 月 1 日を例に挙げます。

>>>datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'

2012 年 4 月 1 日の UTC のエポックは 1333238400 ですが、上記では 1 時間異なる 1333234800 が返されます。

つまり、strftime はシステム時間を考慮して、どこかにタイムゾーン シフトを適用しているようです。datetime はまったくナイーブだと思っていましたが?

どうすればこれを回避できますか? 可能であれば、標準でない限り他のライブラリをインポートしないようにします。(移植性に懸念があります)。

ベストアンサー1

Python 3.3以降では、timestamp():

>>> datetime.datetime(2012,4,1,0,0).timestamp()
1333234800.0

Python 3.2 以前では、明示的にこれを行うことができました:

 >>> (datetime.datetime(2012,4,1,0,0) - datetime.datetime(1970,1,1)).total_seconds()
 1333238400.0

使用すべきでない理由datetime.strftime('%s')

Pythonは実際にはstrftimeの引数として%sをサポートしていません(http://docs.python.org/library/datetime.html#strftime-and-strptime-behaviorリストにない場合、これが機能する唯一の理由は、Python が情報をシステムの strftime に渡しており、それがローカル タイムゾーンを使用しているためです。

>>> datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'

おすすめ記事