"1331856000000"のようなタイムスタンプを含むデータファイルがあります。残念ながら、私はそのフォーマットに関する多くの文書を持っていないので、私はタイムスタンプがどのようにフォーマットされているかわからない。私はPythonの標準のdatetime.fromordinal()
とdatetime.fromtimestamp()
と他のいくつかを試しましたが、何もマッチしません。特定の番号が現在の日付(2012-3-16など)に対応していることは間違いありませんが、それ以上ではありません。
この番号をdatetime
に変換するにはどうすればいいですか?
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
(これはフロア分割と呼ばれます) )除数1000
(int
)を1e3
除数(1000
をfloatとして表現)、またはfloat(1000)
(または1000.
など)に置き換えると、その除算は真の除算になります。 ) Python 2.xは、float
をint
で割ると、float
をfloat
で、int
をfloat
で割ると、float
を返します。 fromtimestamp()
メソッドに渡されたタイムスタンプに小数部がある場合、このメソッドの結果にはその小数部に関する情報(マイクロ秒数)も含まれます。