web-dev-qa-db-ja.com

Pythonでは、Epochからの秒数をどうやって `datetime`オブジェクトに変換するのですか?

timeモジュールはEpochからの秒数で初期化することができます。

>>> import time
>>> t1=time.gmtime(1284286794)
>>> t1
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19, 
                 tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)

同じ方法でdatetime.datetimeオブジェクトを初期化するためのエレガントな方法はありますか?

206
Adam Matan

datetime.datetime.fromtimestamp あなたがタイムゾーンを知っていれば、あなたはtime.gmtimeと同じ出力を生成することができます。

>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)

または

>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)
342
SilentGhost

エポックから datetime から strftime までの秒数:

>>> ts_Epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_Epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
29
Seganku

ドキュメントから、Epoch以降のタイムゾーン対応のdatetimeオブジェクトを秒から取得するための推奨される方法は次のとおりです。

Python

from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)

Python 2pytz を使用:

from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
15
Meistro

Datetime.datetime . fromtimestamp (timestamp)および. tcfromtimestamp (timestamp)は、1970年1月1日より前の日付のウィンドウでは失敗しますが、負のunixタイムスタンプはunixで機能するようです。ベースのプラットフォーム。ドキュメントはこれを言う:

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

Issue 1646728 もご覧ください。

7
cbare