为何无时区信息的datetime对象会以本地时区打印输出?
为什么
datetime.datetime.now()返回本地时间而非UTC时间? 首先要明确,Python的datetime.datetime.now()方法本来就是设计用来获取本地系统时间的,这是它的默认行为,完全符合预期。
- 如果你需要UTC标准时间,对应的方法是
datetime.datetime.utcnow(),调用它就能得到当前的UTC时间。 - 另外要注意,
now()和utcnow()返回的都是不带时区信息的naive datetime对象,如果想避免时间混淆,推荐使用带时区感知的对象——比如Python 3.9及以上版本里,可以用datetime.datetime.now(datetime.timezone.utc)来获取带UTC时区标记的时间。
给个代码示例直观对比:
import datetime # 获取本地时间 local_time = datetime.datetime.now() print(f"本地时间: {local_time}") # 获取UTC时间 utc_time = datetime.datetime.utcnow() print(f"UTC时间: {utc_time}") # 获取带时区标记的UTC时间(Python 3.9+) aware_utc_time = datetime.datetime.now(datetime.timezone.utc) print(f"带时区的UTC时间: {aware_utc_time}")
简单总结:
now()→ 本地系统时间(无时区标记)utcnow()→ UTC时间(无时区标记)- 追求时间准确性的话,尽量使用带时区感知的datetime对象
内容的提问来源于stack exchange,提问作者AlanSTACK
相关产品推荐
相关产品推荐

