我正在尝试将总是在太平洋时间的天真时间戳转换为UTC时间。在下面的代码中,我可以指定这个时间戳是太平洋时间,但似乎不知道它应该与UTC偏移-7小时,因为它只有10/21,DST尚未结束。

剧本:

import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = naive_date.replace(tzinfo=localtz)
print date_aware_la

输出:
    2013-10-21 08:44:08-08:00

在DST在11月3日结束之前,它的偏移量应为-07:00。当DST生效和无效时,如何使我的时区知道日期具有正确的偏移量? pytz是否足够聪明,可以知道DST将于11月3日生效?

总体目标:我只是想将时间戳转换为UTC,因为我知道我将获得太平洋时间的时间戳,而没有任何迹象表明DST是否有效。我不是从python本身生成此日期,所以我不能仅使用utc_now()。

最佳答案

使用localize方法:

import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = localtz.localize(naive_date)
print(date_aware_la)   # 2013-10-21 08:44:08-07:00

the pytz documentation的“示例和用法”部分对此进行了介绍。

然后继续使用UTC:
utc_date = date_aware_la.astimezone(pytz.utc)
print(utc_date)

10-02 06:09
查看更多