在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
不知道时区,而localized_time
知道现在是 2013/11/03 午夜在蒙特利尔,所以 (UTC) Unix 时间戳很好。这个时区也是我当地的时区,这个时间戳看起来是正确的:
$ date -d @1383451200
Sun Nov 3 00:00:00 EDT 2013
现在,11 月 3 日 2:00 蒙特利尔的时钟向后调整了一小时,因此那天我们多了一个小时。这意味着这里有,25 hours2013年11月3日至2013年11月4日期间。这表明:
>>> 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()
and localized_time4td.timestamp() + 3600
.
换句话说,我正在寻找的函数或方法应该知道何时向 Unix 时间戳添加 25 小时、24 小时或 23 小时,具体取决于 DST 转变的时间。