1

ラインを走らせると

time.strptime("2012-06-01 12:00:00 "+time.strftime("%Z"), "%Y-%m-%d %H:%M:%S %Z")

それは私のために構造体を作成しますが、フラグtm_isdstが間違っています。6 月 1 日に DST がアクティブになりましたが、どの日付を入力しても、tm_isdstフラグは常に現在の状態に設定されlocaltime()ます。入力した日付に DST が適用されていたかどうかを知る必要があります。

4

2 に答える 2

3

まず、time.strftime('%Z')フォーマットに含めないでください。現在の GMT オフセット (夏時間のオフを含む) を伝えており、[おそらく] それを使用して tm_isdst を設定しています。

それがなければ、次の構造体を取得する必要がありますtm_isdst=-1

>>> time1 = time.strptime("2012-06-01 12:00:00", "%Y-%m-%d %H:%M:%S")
>>> time1
time.struct_time(tm_year=2012, tm_mon=6, tm_mday=1, tm_hour=12, tm_min=0,
tm_sec=0, tm_wday=4, tm_yday=153, tm_isdst=-1)

これを mktime に渡すことができます。mktime は、値を指定すると-1、DST 値を「推測」します (あいまいな 2AM の場合を除いて常に正しいため、「推測」を引用符で囲みます)。これにより、絶対時間がtime()形式で表示されます。

>>> time.mktime([previous value]) # my timezone is US Eastern
1338566400.0

次に、この値を使用して localtime を呼び出すと、DST フラグが正しく設定されます。

>>> time.localtime(1338566400).tm_isdst
1

strptime ステップをスキップして、値を直接 mktime に渡すこともできます。

>>> time.mktime((2012,6,1,12,0,0,-1,-1,-1))
1338566400.0
于 2012-11-19T13:26:34.243 に答える