1. ホーム
  2. パイソン

[解決済み】pythonのdatetimeをstrftimeでepochに変換する。

2022-04-04 20:09:29

質問

UTCで時刻を指定し、そこからエポックからの秒数を知りたいのです。

strftimeを使って、秒数に変換しています。2012年4月1日を例にとって説明します。

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

エポックから2012年4月1日UTCは1333238400ですが、上記では1333234800と1時間ずれています。

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

どうすれば回避できるのでしょうか?できれば、標準的なものでない限り、他のライブラリのインポートを避けたい。(移植性の懸念があります)。

解決方法は?

Pythonのdatetimeをepochからの秒数に変換したい場合、明示的にそれを行うことができます。

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

Python 3.3以降では timestamp() の代わりに

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


を使用してはいけない理由 datetime.strftime('%s')

Pythonは実はstrftimeの引数として%sをサポートしていません(下記で調べればわかります)。 http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior Pythonがあなたのシステムのstrftimeに情報を渡しているからで、そのstrftimeはあなたのローカルタイムゾーンを使用します。

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