Python time.struct_time
オブジェクトをどのようにオブジェクトに変換しdatetime.datetime
ますか?
最初のライブラリを提供するライブラリと2番目のライブラリを必要とする2番目のライブラリがあります。
Python time.struct_time
オブジェクトをどのようにオブジェクトに変換しdatetime.datetime
ますか?
最初のライブラリを提供するライブラリと2番目のライブラリを必要とする2番目のライブラリがあります。
回答:
利用はtime.mktime()エポックは、その後、使用しているため(localtimeのでは)時間のタプルを秒に変換するには()をdatetime.fromtimestamp DateTimeオブジェクトを取得します。
from datetime import datetime
from time import mktime
dt = datetime.fromtimestamp(mktime(struct))
tm_isdst
データが失われますか?私はそうだと思いますが、結果の日時オブジェクトはNone
、.dst()
たとえであっても、戻ってくる程度まで素朴なままstruct.tm_isdst
です1
。
mktime()
は、これtm_isdst
を考慮に入れる必要があると指定されており、Python time.mktime()
はmktime()
CPythonでC 関数を呼び出します。mktime()
もしそれが(エンド・オブ・DST(「フォールバック」)の移行時に、例えば)あいまいで間違ったローカルタイムが選ぶことstruct.tm_isdst
である-1
場合や、mktime()
特定のプラットフォーム上で無視入力を tm_isdst
。また、ローカルタイムゾーンの過去のutcオフセットが異なっていて、C mktime()
が古いutcオフセット値を提供できる履歴tzデータベースを使用していないmktime()
場合も、誤った値(1時間単位など)を返すことがあります。
mktime()
無視しない場合tm_isdst
(それは私のものです)fromtimestamp()
、情報を確実に失います:現地時間を表す返されたナイーブ datetime
オブジェクトがあいまいかもしれません(タイムスタンプ->現地時間は確定的です(うるう秒を無視する場合)が、local time -> timestamp may be ambiguous e.g., during end-of-DST transition). Also,
fromtimestamp() `が履歴tzデータベースを使用しない場合、間違ったutcオフセットを選択する可能性があります
このような:
>>> structTime = time.localtime()
>>> datetime.datetime(*structTime[:6])
datetime.datetime(2009, 11, 8, 20, 32, 35)
*
and **
構文を@rodling することで、listyまたはdictyタイプのオブジェクトを個別の引数に拡張できます。これは、私のお気に入りのPythonの可愛さの1つです。詳細については、docs.python.org / 2 / tutorial /…を参照してください
t=time.strptime("30 Jun 1997 22:59:60", "%d %b %Y %H:%M:%S"); datetime.datetime(*t[:6])
datetime
:datetime(*t[:5]+(min(t[5], 59),))
たとえば、受け入れる"2015-06-30 16:59:60 PDT"
。
これはあなたの質問に対する直接の回答ではありません(すでにかなりよく回答されています)。しかし、何度もファンダメンタルを何度も私に噛まれたことがあるので、time.struct_timeオブジェクトが提供するものと他の時間フィールドが何を持っているのかを注意深く検討する必要があることを強調することはできません。
time.struct_timeオブジェクトと他の日付/時刻文字列の両方があると想定して、2つを比較し、データを失ったり、意図せずに単純なdatetimeオブジェクトを作成したりしないでください。
たとえば、優れたfeedparserモジュールは「published」フィールドを返し、time.struct_timeオブジェクトを「published_parsed」フィールドに返す場合があります。
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)
ここで、「公開済み」フィールドで実際に何が得られるかに注意してください。
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またはあなたが素晴らしいと思うものすべてに正規化できます。
datetime
ときに失われるオブジェクトのタイムゾーン情報を保持することfeedparser
です。