ミリ秒からPythonで日時を作成するにはどうすればよいですか?


142

java.util.Date(milliseconds)を使用して、Javaで同様のDateオブジェクトを作成できます。Pythonで同等のものを作成するにはどうすればよいですか?

Dateオブジェクトを割り当て、それを初期化して、「エポック」と呼ばれる標準の基準時刻、つまり1970年1月1日00:00:00 GMTからの指定されたミリ秒数を表します。

回答:


215

タイムスタンプに変換するだけです

datetime.datetime.fromtimestamp(ms/1000.0)

17
注意-Python 3では、(/)は浮動小数点除算を実行します。整数除算を実行するには、(//)を使用します。
ジョンミリキン、

3
とにかく実際にフロート分割をしたくないですか?そうしないと、1秒未満の精度が失われます(タイムスタンプの小数部分に保持されます)。切り捨てなしでms / 1000.0を使用することをお勧めします。
ブライアン

4
確かにdatetimeは常にそれをサポートしていますか?1秒未満の精度がある場合、それを破棄するのは間違っているようです。私たちがしなければ、害はありません-元の精度を保持するだけです。
ブライアン、

30
フロートを使用せずに精度を保つために、あなたも行うことができます:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
TSG

2
このソリューションの別の問題:「タイムスタンプがプラットフォームのC localtime()またはgmtime()関数でサポートされている値の範囲外の場合、fromtimestamp()はValueErrorを発生させる可能性があります。これは1970年から2038」-あなたのコードはどのくらい続くと予想されますか???
マイクげっ歯類2015

12

これはどうですか?1970年より前と2038年より後の日付を処理することは期待できると思います。

target_date_time_ms = 200000 # or whatever
base_datetime = datetime.datetime( 1970, 1, 1 )
delta = datetime.timedelta( 0, 0, 0, target_date_time_ms )
target_date = base_datetime + delta

Python標準libで言及されているように:

fromtimestamp()は、タイムスタンプがプラットフォームCのlocaltime()またはgmtime()関数でサポートされている値の範囲外の場合、ValueErrorを発生させる可能性があります。これは1970年から2038年までの年に制限されるのが一般的です。


6
使用できますutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs、2015

9

パンダを使用しているため少し重いですが、動作します:

import pandas as pd
pd.to_datetime(msec_from_java, unit='ms').to_pydatetime()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.