我有几个本地时间点:
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])
似乎适用于Japan和CET,但不适用于GMT/WET(因为伦敦在夏天位于BST/WEST)。
那么,我该怎么办?
Python 使用 IANA 时区数据库。 时区名称列表可以在此处找到。 根据此表,“GMT”是一个与 UTC 偏移量为 0 的时区,并且不遵守夏令时。
也许“欧洲/伦敦”会给您所需的结果。