整数のタイムスタンプをPythonの日時に変換する方法


189

「1331856000000」のようなタイムスタンプを含むデータファイルがあります。残念ながら、フォーマットに関するドキュメントがあまりないため、タイムスタンプのフォーマットがわかりません。私はPythonの標準datetime.fromordinal()datetime.fromtimestamp()他のいくつかを試しましたが、何も一致しません。特定の数値が現在の日付(例:2012-3-16)に対応していると確信していますが、それ以上ではありません。

この数値をどのようにaに変換しdatetimeますか?

回答:


329

datetime.datetime.fromtimestamp() おそらく、JavaScriptのようにミリ秒単位のタイムスタンプがあることを除いて、正しいですが、 fromtimestamp()秒単位のタイムスタンプ UNIXタイムスタンプ(秒単位想定。

そのようにしてください:

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

結果は次のとおりです。

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

それはあなたの質問に答えますか?

編集:JF Sebastianは(float )による真の除算使用するように正しく提案しました。正確な結果を取得したい場合は、違いが大きく、答えを変更しました。この違いは、Python 2.xのデフォルトの動作に起因します。これは、(演算子を使用して)を除算すると常に返されます(これは、床除算と呼ばれます)。除数(であること)を除数(浮動小数点として表現されていること)または(など)で置き換えることにより、除算はの除算になります。Pythonの2.xの戻り分割により、により、1e31000int/intint1000int1e31000float(1000)1000.floatintfloatfloatintfloatfloatなど。fromtimestamp()メソッドに渡されるタイムスタンプに小数部分がある場合、このメソッドの結果には、その小数部分に関する情報(マイクロ秒数)も含まれます。


13
真の除算を使用:/ 1e3
jfs

@JFSebastian:あなたは完全に正しいです。私は私の答えを編集し、あなたが正しい理由を説明しました。説明に同意できない場合はお知らせください。
Tadeck 2012年

@ manu-fatto:それは本当に重要ではありません。x * 0.001x / 1e3どちらも同じですが、表記と長さが異なります(元の方が短い)。一部の人にとっては、提案した乗法逆数1/x)を掛けるのではなく、実際に数で割るほうが明確な場合があります。しかし、代替アプローチを提案してくれてありがとう。
Tadeck 2013年

58
タイムゾーンを考慮に入れるため、この関数は危険です。utcfromtimestampを検索してみてください
Haim Bender

12
@HaimBenderありがとう!あなたのコメントはもっと注目に値すると思います。fromtimestamp日付と時刻を現地時間でutcfromtimestamp与える日付と時刻をUTCで与える
yusong 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.