将其他时区转换为本地时区(偏移量)
Posted
技术标签:
【中文标题】将其他时区转换为本地时区(偏移量)【英文标题】:Converting other time zones into local time zone (offset) 【发布时间】:2021-10-16 06:16:25 【问题描述】:我正在尝试创建一个将两个参数作为输入的函数。
-
字符串形式的时间(“2021-08-13 19:00”)
时区 (-4)
我希望函数将给定时区的时间转换为我计算机的本地时区(偏移量)。有人可以帮忙吗?
【问题讨论】:
我不知道在 Python 中获取本地时区的方法。您可以获得当前的本地时间偏移量,但这不是一回事。从您的问题来看,您也可能对差异感到困惑。 @MarkRansom 是的,我的意思是偏移量,对不起! 偏移量只适用于当前时刻,昨天或明天可能会有所不同,您的时间将会关闭。 @Mark:“目前还好”可能是“足够好”。 @martineau 如果“当前时刻”足够好,为什么函数的参数之一是日期/时间? 【参考方案1】:您可以通过 timedelta 对象从 UTC 偏移小时创建timezone object。然后使用tzlocal 获取本地时区(即您的机器配置使用的时区)并使用astimezone 进行转换。
例如:
from datetime import datetime, timedelta, timezone
from tzlocal import get_localzone # pip install tzlocal
def to_local(s, offsethours):
"""
convert date/time string plus UTC offset hours to date/time in
local time zone.
"""
dt = datetime.fromisoformat(s).replace(tzinfo=timezone(timedelta(hours=offsethours)))
# for Python < 3.7, use datetime.strptime(s, "%Y-%m-%d %H:%M") instead of datetime.fromisoformat(s)
return dt.astimezone(get_localzone())
time_string = "2021-08-13 19:00"
time_offset = -4
dt_local = to_local(time_string, time_offset)
print(repr(dt_local))
print(dt_local.isoformat())
print(dt_local.utcoffset())
# datetime.datetime(2021, 8, 14, 1, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)
# 2021-08-14T01:00:00+02:00
# 2:00:00
【讨论】:
以上是关于将其他时区转换为本地时区(偏移量)的主要内容,如果未能解决你的问题,请参考以下文章
Python pytz 时区转换返回的值与不同日期的时区偏移量不同