在Python中,我可以找到当地时间的Unix时间戳,知道时区,就像这样(使用pytz):
>>> import datetime as DT >>> import pytz >>> mtl = pytz.timezone('America/Montreal') >>> naive_time3 = DT.datetime.strptime('2013/11/03', '%Y/%m/%d') >>> naive_time3 datetime.datetime(2013, 11, 3, 0, 0) >>> localized_time3 = mtl.localize(naive_time3) >>> localized_time3 datetime.datetime(2013, 11, 3, 0, 0, tzinfo=) >>> localized_time3.timestamp() 1383451200.0
到现在为止还挺好.naive_time
我不知道时区,而localized_time
知道它在2013/11/03 在蒙特利尔的午夜,所以(UTC)Unix时间戳是好的.这个时区也是我当地的时区,这个时间戳似乎是正确的:
$ date -d @1383451200 Sun Nov 3 00:00:00 EDT 2013
现在,时钟在11月3日凌晨2点在蒙特利尔调整了一个小时,所以我们当天增加了一小时.这意味着2013/11/03至2013/11/04之间有25小时.这表明:
>>> naive_time4 = DT.datetime.strptime('2013/11/04', '%Y/%m/%d') >>> localized_time4 = mtl.localize(naive_time4) >>> localized_time4 datetime.datetime(2013, 11, 4, 0, 0, tzinfo=) >>> (localized_time4.timestamp() - localized_time3.timestamp()) / 3600 25.0
现在,我正在寻找一种简单的方法来获取localized_time4
对象localized_time3
,因为我知道我想在同一时间(这里,午夜)获得下一个本地化的日子.我试过timedelta
,但我相信它不知道时区或夏令时:
>>> localized_time4td = localized_time3 + DT.timedelta(1) >>> localized_time4td datetime.datetime(2013, 11, 4, 0, 0, tzinfo=) >>> (localized_time4td.timestamp() - localized_time3.timestamp()) / 3600 24.0
我的目的是获取有关每个本地日的Unix时间戳存储的日志条目的信息.当然,如果我在这里使用localized_time3.timestamp()
和添加24 * 3600
(它将是相同的localized_time4td.timestamp()
),我将错过在localized_time4td.timestamp()
和之间发生的所有日志条目localized_time4td.timestamp() + 3600
.
换句话说,我正在寻找的功能或方法应该知道何时在Unix时间戳上添加25小时,24小时或23小时,具体取决于DST转换发生的时间.