Pythonでは、エポックからの秒数をどのように `datetime`オブジェクトに変換しますか?


248

timeモジュールはエポックからの秒数を使用して初期化することができます。

>>> 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同じ方法でオブジェクトを初期化するエレガントな方法はありますか?


3
反対の操作については、こちらをご覧ください:convert-a-datetime-object-to-seconds
— Trevor Boyd Smith

回答:


404

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)

42
奇妙なことにdatetime.utcfromtimestamp、単純なタイムスタンプを作成します。私がしなければならなかったimport pytzし、使用datetime.fromtimestamp(1423524051, pytz.utc)を意識日時を作成します。
— マット

6
上記の続きとして、Python> = 3.2ではpytz、UTCタイムスタンプのみが必要な場合はライブラリをインポートする必要はありません。必要なのfrom datetime import datetime, timezoneは次のようにして呼び出すだけですdatetime.fromtimestamp(1423524051, timezone.utc)。からのUTCタイムゾーンのみが必要なときに、追加のライブラリを何度も節約しましたpytz。
— phouse512

38

エポックからto 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'

datetime.fromtimestamp(1579366345).strftime( '%Y-%m-%d%H:%M:%S')である必要があります
— vml19

26

ドキュメントから、エポック以降の秒からタイムゾーン対応の日時オブジェクトを取得する推奨方法は次のとおりです。

Python 3:

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

Python 2、使用pytz:

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

字幕のドキュメントへのリンク(「Python 3」、「Python 2」)は役に立ちます-また、それらの順序を変更することをお勧めします。
— Adam Matan

更新しました。注文はそのままにしておきます。Pythonのドキュメントと一致するためです。
— Meistro 2016年

tzinfoオブジェクトpytzを取得する必要はありませんutc。自分で作成するのは簡単です
— jfs

9

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

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

Issue1646728も参照


:o)はい、それでも修正されるまでにはまだ23年
— かかり

5
utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp)回避策としてを使用できます。
— jfs
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.