Python中朴素datetime对象转UTC时时间变化的原因探究
关于Python朴素datetime对象转换时区的行为解析
先明确两个关键操作的核心差异:
datetime.now()生成的是朴素datetime:这个对象没有时区信息(tzinfo为None),但实际对应的是你当前系统本地时区的时间(示例里的22:09就是本地时间)。now.astimezone(pytz.utc)的逻辑:
当你给朴素datetime调用astimezone()时,Python会自动把这个朴素时间当作本地时区的时间,然后执行时区转换——把本地时间换算成目标时区(UTC)的时间。示例里本地22:09转成UTC的20:09,本质是本地时区与UTC的时差导致的换算结果。pytz.utc.localize(now)的逻辑:
这个操作只是给朴素datetime直接添加UTC时区标记,不会做任何时间计算。它默认认为你传入的22:09本身就是UTC时间,所以结果保留原时间数值,仅加上UTC的时区信息。
附上你执行的代码示例:
>>> import pytz >>> from datetime import datetime >>> now = datetime.now() >>> now datetime.datetime(2022, 10, 11, 22, 9, 14, 169110) >>> now.tzinfo None # 尽管没有tzinfo,转换为UTC后显示20:09 >>> now.astimezone(pytz.utc) datetime.datetime(2022, 10, 11, 20, 9, 14, 169110, tzinfo=<UTC>) >>> pytz.utc.localize(now) datetime.datetime(2022, 10, 11, 22, 9, 14, 169110, tzinfo=<UTC>)
内容的提问来源于stack exchange,提问作者alib1
相关产品推荐
相关产品推荐

