7

したがって、現在、次のようなコード行があります。

        t1 = datetime(self.year, self.month, self.day, self.hour, self.minute, self.second)
        ...
        t2 = timedelta(days=dayNum, hours=time2.hour, minutes=time2.minute, seconds=time2.second)
        sumVal = t1 + t2

結果には、発生する可能性のあるDSTの影響を考慮に入れたいと思います(たとえば、2012年11月4日午前00時30分に3時間を追加すると、フォールバックのために午前2時30分になります)。 DSTの場合)。pytzとpython-dateutilの使用を検討しましたが、どちらもこれをサポートしていないようです。少なくとも、すべてのタイムゾーンを含む別のファイルがないとサポートされていません。キッカーは、時刻が必ずしも現在のシステムと同じタイムゾーンにあるとは限らない、または過去にあるとは限らないということです。これを行う簡単な方法があると確信しています(またはPythonからそうなると思います)が、今必要なものは何もないようです。何か案は?

4

1 に答える 1

5

おそらく、pytznormalize方法はあなたが探しているものです:

import datetime as dt
import pytz

tz=pytz.timezone('Europe/London')
t1 = dt.datetime(2012,10,28,0,30,0)
t1=tz.localize(t1)
t2 = dt.timedelta(hours=3)
sumVal = t1 + t2

sumValBSTに残ります:

print(repr(sumVal))
# datetime.datetime(2012, 10, 28, 3, 30, tzinfo=<DstTzInfo 'Europe/London' BST+1:00:00 DST>)

正規化後sumVal、GMTになります:

sumVal = tz.normalize(sumVal)
print(repr(sumVal))
# datetime.datetime(2012, 10, 28, 2, 30, tzinfo=<DstTzInfo 'Europe/London' GMT0:00:00 STD>)

ロンドンの場合、DST移行はで発生することに注意してください2012-10-28 02:00:00

于 2011-09-21T03:26:49.937 に答える