1. ホーム
  2. パイソン

[解決済み】pythonでdatetimeをUnixタイムスタンプに変換して元に戻す

2022-04-02 08:45:45

質問

私は dt = datetime(2013,9,1,11) そして、このdatetimeオブジェクトのUnixタイムスタンプを取得したいと思います。

を実行すると (dt - datetime(1970,1,1)).total_seconds() タイムスタンプを取得 1378033200 .

を使って変換し直すと datetime.fromtimestamp 私は datetime.datetime(2013, 9, 1, 6, 0) .

時間が合わない。ここで何を間違えたのでしょうか?

解決方法は?

ここで見落としているのは、タイムゾーンです。

おそらくUTCから5時間ずれているので、2013-09-01T11:00:00 local と 2013-09-01T06:00:00Z は同じ時刻になりますね。

の先頭を読む必要があります。 datetime docs に、タイムゾーンと "naive" と "aware" オブジェクトについて説明されています。

元の naive datetime が UTC であった場合、それを回復する方法として utcfromtimestamp の代わりに fromtimestamp .

一方、元のナイーブなdatetimeがローカルなものであれば、そもそもUTCタイムスタンプを差し引くべきでない。 datetime.fromtimestamp(0) の代わりに

あるいは、aware datetimeオブジェクトを持っていた場合、両側でローカル(aware)エポックを使用するか、明示的にUTCとの間で変換する必要があります。

Python 3.3以降を持っているか、アップグレードできるのであれば、これらの問題はすべて timestamp メソッドを使うことで、自分でその方法を考えずに済みます。また、そうでない場合でも、次のようなことを検討するとよいでしょう。 ソースコードを借用する .

(そして、Python 3.4 を待つことができるのであれば、次のように表示されます。 PEP 341 つまり、J.F. Sebastianと私がコメントで話していたことは、すべてstdlibだけで可能であり、UnixとWindowsの両方で同じように動作するはずです(笑)。