web-dev-qa-db-ja.com

time.struct_timeオブジェクトをどのようにしてdatetimeオブジェクトに変換しますか?

Pythonのtime.struct_timeオブジェクトをdatetime.datetimeオブジェクトにどのように変換しますか?

最初のライブラリを提供するライブラリと、2番目のライブラリを必要とするライブラリがあります。

271
static_rtti

time.mktime() を使用して(現地時間での)時刻TupleをEpochからの秒数に変換し、次に datetime.fromtimestamp() を使用してdatetimeオブジェクトを取得します。

from datetime import datetime
from time import mktime

dt = datetime.fromtimestamp(mktime(struct))
366
Rod Hyde

このような:

>>> structTime = time.localtime()
>>> datetime.datetime(*structTime[:6])
datetime.datetime(2009, 11, 8, 20, 32, 35)
122
Nadia Alramli

これはあなたの質問に対する直接的な回答ではありません(すでにかなりよく回答されています)。しかし、基本的なことに何度か悩まされたことがあるので、time.struct_timeオブジェクトが提供しているものと、他の時間フィールドの関係をよく見てみるのは無理があります。

Time.struct_timeオブジェクトと他の日付/時刻文字列の両方があると仮定して、2つを比較し、そうでない場合は、データを失うことなく、誤って単純なdatetimeオブジェクトを作成しないようにします。

たとえば、優れたfeedparserモジュールは "published"フィールドを返し、その "published_pa​​rsed"フィールドにtime.struct_timeオブジェクトを返すかもしれません:

time.struct_time(tm_year=2013, tm_mon=9, tm_mday=9, tm_hour=23, tm_min=57, tm_sec=42, tm_wday=0, tm_yday=252, tm_isdst=0)

さて、あなたが実際に "published"フィールドで得たものに注意してください。

Mon, 09 Sep 2013 19:57:42 -0400

ストールマン のあごひげ!タイムゾーン情報!

この場合、怠け者はタイムゾーン情報を保持するために優れたdateutilモジュールを使用したいと思うかもしれません。

from dateutil import parser
dt = parser.parse(entry["published"])
print "published", entry["published"])
print "dt", dt
print "utcoffset", dt.utcoffset()
print "tzinfo", dt.tzinfo
print "dst", dt.dst()

これは私たちに与えます:

published Mon, 09 Sep 2013 19:57:42 -0400
dt 2013-09-09 19:57:42-04:00
utcoffset -1 day, 20:00:00
tzinfo tzoffset(None, -14400)
dst 0:00:00

それから、タイムゾーンを意識したdatetimeオブジェクトを使って、すべての時間をUTCまたはあなたが素晴らしいと思うものに正規化することができます。

34
lysdexia