首页 > 解决方案 > 为什么 pytz.localize 和 datetime.replace 返回不同的结果?

问题描述

正如pytz 的文档所说:

def localize(self, dt, is_dst=False):
    '''Convert naive time to local time'''
    if dt.tzinfo is not None:
        raise ValueError('Not naive datetime (tzinfo is already set)')
    return dt.replace(tzinfo=self)

因此,如最后一行所示,localize 和 dt.replace 是相同的。因为上面的算法,如果我们删除if部分,就是return dt.replace(tzinfo=self)使用datetime.replace.

但是我们知道输出是不同的:

time = datetime.now()
tehran_tz = pytz.timezone('Asia/Tehran')
print(tehran_tz.localize(time))
print(time.replace(tzinfo=tehran_tz))

输出:

2021-02-22 21:15:29.781400+03: 30
2021-02-22 21:15:29.781400+03: 26

这里讨论的不是哪个是正确的。但是为什么它们不同,而它们的代码是相同的。

标签: pythondjangodatetimetimezone

解决方案


推荐阅读