You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码获取Europe/Ljubljana本地时区的正确时间?

问题:获取Europe/Ljubljana时区本地时间失败,显示UTC时间

我尝试用以下代码获取Europe/Ljubljana时区的本地时间:

pytz.timezone('Europe/Ljubljana').localize(datetime.datetime.now().replace(microsecond=0))

但结果显示的是UTC+2偏移的UTC时间,而非卢布尔雅那的本地时间。我试了多种方案都没成功,包括:

pytz.timezone('Europe/London').localize(datetime.datetime.now(tzlocal).replace(microsecond=0))
pytz.timezone('Europe/Ljubljana').localize(datetime.datetime.now().replace(microsecond=0))
utc_now.astimezone(pytz.timezone("Pacific/Honolulu"))
pytz.utc.localize().astimezone(pytz.timezone('EST')).replace(microsecond=0))
datetime.datetime.now(pytz.timezone('Europe/Ljubljana'))
datetime.datetime.now(ZoneInfo("America/Los_Angeles"))

错误原因

datetime.datetime.now()生成的是不带时区信息的 naive datetime 对象,直接用localize()方法时,若系统本地时区与目标时区不一致,易出现偏移错误;部分尝试的代码还存在语法问题(比如pytz.utc.localize()缺少必填参数)。

正确解决方案

方案1:pytz的正确用法

先获取UTC标准时间,再转换为目标时区:

import datetime
import pytz

# 获取带UTC时区标识的时间
utc_now = pytz.utc.localize(datetime.datetime.utcnow().replace(microsecond=0))
# 转换为Europe/Ljubljana时区
ljubljana_time = utc_now.astimezone(pytz.timezone('Europe/Ljubljana'))
print(ljubljana_time)

若系统本地时间准确,也可直接转换本地时间:

import datetime
import pytz

local_now = datetime.datetime.now().replace(microsecond=0)
# is_dst=None 强制检查时区有效性,避免夏令时切换的模糊时间错误
ljubljana_time = pytz.timezone('Europe/Ljubljana').localize(local_now, is_dst=None)
print(ljubljana_time)

方案2:Python3.9+推荐用ZoneInfo(替代pytz)

Python3.9及以上版本建议使用标准库内置的ZoneInfo,用法更简洁可靠:

from datetime import datetime
from zoneinfo import ZoneInfo

# 直接生成目标时区的带标识时间
ljubljana_time = datetime.now(ZoneInfo('Europe/Ljubljana')).replace(microsecond=0)
print(ljubljana_time)

关键注意事项

  • 避免直接对naive datetime对象调用localize(),除非你明确该对象的时区就是目标时区;
  • 涉及夏令时切换的时区,设置is_dst=None可避免模糊时间导致的错误;
  • Python3.9+优先使用ZoneInfo,无需额外安装依赖,且完全兼容IANA时区数据库。

内容的提问来源于stack exchange,提问作者Resolved

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:07:16