2012-03-16 13 views
106

"1331856000000"のようなタイムスタンプを含むデータファイルがあります。残念ながら、私は書式に関する多くのドキュメントを持っていないので、タイムスタンプがどのように書式設定されているのか分かりません。私はPythonの標準datetime.fromordinal()datetime.fromtimestamp()といくつかの他のものを試しましたが、何も一致しません。特定の数字が現在の日付(たとえば2012-3-16)に対応していることは間違いありませんが、それほど多くはありません。整数タイムスタンプをPython datetimeに変換する方法

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

答えて

193

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:J.F.セバスチャンが正しく1e3(フロート1000)によって使用真部門に提案しました。あなたが正確な結果を得たいなら、その違いは重要です。私は答えを変えました。この相違点は、Python 2.xのデフォルトの動作に起因します。intは、/演算子を使用してintint(これはと呼ばれます)で除算すると常に返されます。 1e3除数(フロートとして1000のある表現)またはfloat(1000)(又は1000.など)と除数1000intある)を置き換えることにより、分割は、真分割なります。 Pythonの2.xではfloatによってintを分割する際、floatを返しintによってfloatfloatfloatなどによってそしてfromtimestamp()メソッドに渡されたタイムスタンプで、いくつかの小数部分がある場合には、このメソッドの結果も数としてその端数部分(に関する情報が含まれていますマイクロ秒)。

+6

true division: '/ 1e3' – jfs

+0

@ J.F.Sebastian:あなたはまったく正しいです、私は自分の答えを編集し、あなたが正しい理由を追加しました。説明に同意しない場合は、私に知らせてください。 – Tadeck

+3

私はx/1e3の代わりにx * 0.001を書く方がはっきりしています –

関連する問題