将具有 UTC 时区偏移量的日期转换为相应的本地时区格式

Convert a date with UTC timezone offset to corresponding local timezone format

我有一个字符串日期,它已经包含一个适当的时区偏移量 -08:00,我可以将它转换成一个日期时间变量,但具有 UTC 时区格式:

from datetime import datetime
from pytz import timezone
import pytz

str_date = '2020-01-01T00:00:00-08:00'#
specific_date_format = "%Y-%m-%d %H:%M:%S %Z"

my_date = datetime.fromisoformat(str_date)
print(my_date.strftime(specific_date_format))

_____________________________________________
Output
>> 2020-01-01 00:00:00 UTC-08:00

我需要的格式是

2020-01-01 00:00:00 PST

不确定如何将 UTC-08:00 转换为 PST。

尝试使用 pytz 并看到了用预定义 'America/Los_Angeles' 替换时区的建议,但我需要代码来检测小时偏移 UTC-08:00 对应于 'America/Los_Angeles' 时区并转换就这样。

由于您的输入已经包含 UTC 偏移量,您可以 parse the iso-format string to aware datetime (tzinfo set) and use astimezone 设置正确的时区。使用 pytz:

from datetime import datetime
from pytz import timezone # Python 3.9: zoneinfo (standard lib)

str_date = '2020-01-01T00:00:00-08:00'

# to datetime
dt = datetime.fromisoformat(str_date)

# to tz
dt_tz = dt.astimezone(timezone("America/Los_Angeles"))

print(dt_tz)
# 2020-01-01 00:00:00-08:00
print(repr(dt_tz))
# datetime.datetime(2020, 1, 1, 0, 0, tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)
print(dt_tz.strftime("%a, %d %b %Y %H:%M:%S %Z"))
# Wed, 01 Jan 2020 00:00:00 PST

另请参阅:Display the time in a different time zone - e.g. this answer Python 3.9/zoneinfo 示例。