将日期时间偏移量添加到 UTC 时间戳

Add datetime offset to UTC timestamp

我的代码中有一些 UTC 日期时间戳,例如“2022-05-20 01:00:00+00:00”,我希望对它们应用一个偏移量,例如“+10:00”(或"+1000") 并得到结果 "2022-05-20 11:00:00+00:00"

我不知道要转换到的时区的名称,它与 UTC 相比的偏移量是多少。

有没有比将 timedelta 应用到我的时间戳更直接的方法?

您可以使用 timedelta 对象将时间添加到现有日期时间:

from datetime import timedelta, datetime
from pytz import UTC

original_time = datetime(2022, 5, 20, 1, 0, 0, tzinfo=UTC)  # 2022-05-20 01:00:00+00:00
time_diff = timedelta(hours=10)
new_time = original_time + time_diff  # 2022-05-20 11:00:00+00:00

请注意,2022-05-20 01:00:00+00:002022-05-20 11:00:00+00:00不是相同的时间戳,它们是两个任意时间,没有明显的关系。您可能想要的是 2022-05-20 11:00:00+10:00,它与第一个时间戳相同,只是在不同的时区。到达那里非常简单:

>>> from datetime import *
>>> ts = '2022-05-20 01:00:00+00:00'
>>> dt = datetime.strptime(ts, '%Y-%m-%d %H:%M:%S%z')
datetime.datetime(2022, 5, 20, 1, 0, tzinfo=datetime.timezone.utc)
>>> tz = timezone(timedelta(hours=10))
datetime.timezone(datetime.timedelta(seconds=36000))
>>> dt_loc = dt.astimezone(tz)
datetime.datetime(2022, 5, 20, 11, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=36000)))
>>> print(dt_loc)
2022-05-20 11:00:00+10:00

如果您的偏移量只是一个字符串,那么将其转换为 timezone:

就足够简单了
>>> datetime.strptime('+10:00', '%z').tzinfo
datetime.timezone(datetime.timedelta(seconds=36000))

适用于正偏移和负偏移。