在不同日期将相同的当地时间转换为 UTC,尊重当地 DST 状态

问题描述 投票:0回答:1

我有几个本地时间点:

import datetime
from zoneinfo import ZoneInfo as zi

wmr = datetime.time(hour=12, tzinfo=zi("GMT"))
ecb = datetime.time(hour=14, minute=15, tzinfo=zi("CET"))
jpx = datetime.time(hour=14, tzinfo=zi("Japan"))

我想将其转换为给定日期的 UTC 时间。

例如,

local2utc(datetime.datetime(2024,1,1), wmr) ---> "2024-01-01 12:00:00" 
local2utc(datetime.datetime(2024,6,1), wmr) ---> "2024-06-01 11:00:00" (DST active)
local2utc(datetime.datetime(2024,1,1), ecb) ---> "2024-01-01 13:15:00" 
local2utc(datetime.datetime(2024,6,1), ecb) ---> "2024-06-01 12:15:00" (DST active)
local2utc(datetime.datetime(2024,1,1), jpx) ---> "2024-01-01 05:00:00" 
local2utc(datetime.datetime(2024,6,1), jpx) ---> "2024-06-01 05:00:00" (no DST in Japan)

以下实现

def local2utc(date, time):
    local_dt = datetime.datetime.combine(date,time)
    tm = local_dt.utctimetuple()
    return datetime.datetime(*tm[:7])

似乎适用于JapanCET,但不适用于GMT/WET(因为伦敦在夏天位于BST/WEST)。

那么,我该怎么办?

python datetime timezone localtime zoneinfo
1个回答
0
投票

Python 使用 IANA 时区数据库。 时区名称列表可以在此处找到。 根据此表,“GMT”是一个与 UTC 偏移量为 0 的时区,并且遵守夏令时。

也许“欧洲/伦敦”会给您所需的结果。

© www.soinside.com 2019 - 2024. All rights reserved.