web-dev-qa-db-ja.com

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

"1331856000000"のようなタイムスタンプを含むデータファイルがあります。残念ながら、私はそのフォーマットに関する多くの文書を持っていないので、私はタイムスタンプがどのようにフォーマットされているかわからない。私はPythonの標準のdatetime.fromordinal()datetime.fromtimestamp()と他のいくつかを試しましたが、何もマッチしません。特定の番号が現在の日付(2012-3-16など)に対応していることは間違いありませんが、それ以上ではありません。

この番号をdatetimeに変換するにはどうすればいいですか?

150
Cerin

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)

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

EDIT:JF Sebastianは1e3による真の除算の使用を正しく提案しました(float 1000)正確な結果を得たいのであれば、違いは重要です。したがって、私は私の答えを変更しました。この違いは、Python 2.xのデフォルトの振る舞いに起因します。これは、(/演算子を使用して)分割するときに常にintを返すint by int(これはフロア分割と呼ばれます) )除数1000int)を1e3除数(1000をfloatとして表現)、またはfloat(1000)(または1000.など)に置き換えると、その除算は真の除算になります。 ) Python 2.xは、floatintで割ると、floatfloatで、intfloatで割ると、floatを返します。 fromtimestamp()メソッドに渡されたタイムスタンプに小数部がある場合、このメソッドの結果にはその小数部に関する情報(マイクロ秒数)も含まれます。

268
Tadeck