首页 > 解决方案 > 为天真的日期时间添加 tzinfo 会导致奇怪的偏移量?

问题描述

我只是想tzinfo为我的datetime对象添加(没有特定时间)。我有格式的日期和str格式的时区str。我创建了这个函数:

from datetime import datetime
import pytz

def _converttime(dt_str, tz_str):
    dt = datetime.fromisoformat(dt_str)
    tz = pytz.timezone(tz_str)
    dt = dt.replace(tzinfo=tz)
    return dt

当我使用时,一切看起来都很好tzinfo:“Etc/GMT-6”:

a = _converttime("2018-01-01", "Etc/GMT-6")
        print(f'a: {a}')
>>a: 2018-01-01 00:00:00+06:00

但看看这个:

 b = _converttime("2018-01-01", "Europe/Kirov")
        print(f'b: {b}')
>>b: 2018-01-01 00:00:00+03:19

c = _converttime("2018-01-01", "America/Panama")
        print(f'c: {c}')
>>c: 2018-01-01 00:00:00-05:18

为什么我应该在 03:00、-05:00 时得到像 03:19、05:18 这样的奇怪值?它最近引起了问题。

标签: pythondatetimepytz

解决方案


我认为您想要做的是使用tz.localize,您的功能将变为:

from datetime import datetime
import pytz

def _converttime(dt_str, tz_str):
    dt = datetime.fromisoformat(dt_str)
    tz = pytz.timezone(tz_str)
    dt = tz.localize(dt)
    return dt

使用此功能,您可以获得正确的结果。


推荐阅读