Python datetime.replace转换时区为什么少几分钟

datetime(2022,8,5,0,0,0).replace(tzinfo=pytz.timezone('PRC')).timestamp()
得到1659628440,时间戳为什么不是整点;

阅读 3.5k
3 个回答
>>> pytz.timezone('PRC')
<DstTzInfo 'PRC' LMT+8:06:00 STD>
>>> pytz.timezone('Asia/Shanghai')
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>

pytz 这里的PRCAsia/Shanghai时间都比UTC多了8小时零6分钟,并不是北京时间
这里可以用astimezone方法

>>> datetime.datetime(2022,8,5,0,0,0).astimezone(pytz.timezone('UTC'))
datetime.datetime(2022, 8, 4, 16, 0, tzinfo=<UTC>)
>>> datetime.datetime(2022,8,5,0,0,0).astimezone(pytz.timezone('PRC'))
datetime.datetime(2022, 8, 5, 0, 0, tzinfo=<DstTzInfo 'PRC' CST+8:00:00 STD>)

pytz:

This library differs from the documented Python API for tzinfo implementations; if you want to create local wallclock times you need to use the localize() method documented in this document.

非常感谢zhwei的帮助,帮助我找到了原因;
然后用fefe提供的localize(),找到了直接用本地时间进行转换的简洁方法

timezone = pytz.timezone('Asia/Shanghai') 
timezone.localize(day_time).timestamp()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题