使用pytz的Python中datetime strptime丢失DST

1 投票
1 回答
2729 浏览
提问于 2025-04-18 11:15

我有一个字符串格式

frmt = "%m-%d-%Y %I:%M:%S %p"

当我把现在的时间转换成这个格式再转换回来时,我失去了夏令时的信息。

print datetime.strptime(datetime.now().strftime(frmt), frmt).replace(tzinfo=pytz.timezone("US/Eastern")).dst()


print datetime.now(tz=pytz.timezone("US/Eastern")).dst()

第一次打印出来是1:00:00,第二次打印出来是0:00:00。
有没有办法在使用datetime.strptime时保留夏令时的信息?

1 个回答

3

根据pytz的说明

这个库和Python的tzinfo实现的官方文档有些不同;如果你想创建本地的实际时间,你需要使用这个文档中提到的localize()方法。...

你还应该考虑从“现在”的UTC时间开始,而不是你电脑的时区。这样你就可以转换到你想要的时区。

另外,你应该使用"America/New_York",而不是"US/Eastern",因为后者只是为了向后兼容而存在。虽然它能用,但不推荐使用。

utc_dt = pytz.utc.localize(datetime.utcnow())
eastern_dt = utc_dt.astimezone(pytz.timezone("America/New_York"))

撰写回答