使用pytz的Python中datetime strptime丢失DST
我有一个字符串格式
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"))