在 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=<DstTzInfo 'America/Montreal' EDT-1 day, 20:00:00 DST>)
>>> localized_time3.timestamp()
1383451200.0
到目前为止,一切都很好。naive_time
不知道时区,而知道其在 Montréallocalized_time
的 2013/11/03 的午夜,因此 (UTC) Unix 时间戳很好。这个时区也是我的本地时区,这个时间戳似乎是正确的:
$ date -d @1383451200
Sun Nov 3 00:00:00 EDT 2013
现在,蒙特利尔的时钟在 11 月 3 日下午 2:00 后调了一小时,所以那天我们多出了一个小时。这意味着在 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=<DstTzInfo 'America/Montreal' EST-1 day, 19:00:00 STD>)
>>> (localized_time4.timestamp() - localized_time3.timestamp()) / 3600
25.0
现在,我正在寻找一种localized_time4
从 中获取对象的简单方法localized_time3
,因为我知道我想在同一时间(此处为午夜)获取下一个本地化日。我试过timedelta
了,但我相信它不知道时区或 DST:
>>> localized_time4td = localized_time3 + DT.timedelta(1)
>>> localized_time4td
datetime.datetime(2013, 11, 4, 0, 0, tzinfo=<DstTzInfo 'America/Montreal' EDT-1 day, 20:00:00 DST>)
>>> (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
。
换句话说,我正在寻找的函数或方法应该知道何时将 25 小时、24 小时或 23 小时添加到 Unix 时间戳,具体取决于 DST 转换发生的时间。