将其他时区转换为本地时区(偏移量)

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 时区转换返回的值与不同日期的时区偏移量不同

将时区偏移量(ISO 8601 格式)添加到原始日期时间

如何将系统时间转换成utc时间

如何将UTC时间转化为本地时间

javascript toISOString()忽略时区偏移量

时区分钟偏移量的 TimeZoneInfo