gpt4 book ai didi

python - 模块 pytz : UTC decrease instead of increase

转载 作者:太空狗 更新时间:2023-10-30 01:10:57 24 4
gpt4 key购买 nike

编辑:我想转换我所在国家/地区 UTC(西类牙)的 UTC 时间。我正在使用模块 pytz 进行转换,但我得到的结果是 UTC-1 而不是 UTC+1。这是我的代码:

import datetime
import pytz

madrid = pytz.timezone("Europe/Madrid")
UTC_time = datetime.datetime.strptime("2019-03-01 14:45","%Y-%m-%d %H:%M")
madrid_dt = madrid.localize(UTC_time, is_dst=None)
MadridTime = madrid_dt.astimezone(pytz.utc).strftime ("%Y-%m-%d %H:%M")

这是输出:

UTC_Time: 2019-03-01 14:45:00
MadridTime: 2019-03-01 13:45

我需要 MadridTime 返回 15:45 而不是 13:45。我做错了什么?

EDITED2:在您的帮助下,我发现我混淆了 localize 和 astimeszone 的使用。现在我面临两个新问题。这是新代码:

import datetime
import pytz

dt = datetime.datetime.strptime('2019-03-01 14:45','%Y-%m-%d %H:%M')

madrid_tz = pytz.timezone('Europe/Madrid')
madrid = dt.astimezone(madrid_tz)

print(madrid)
# 2019-03-01 14:45:00+01:00

print(madrid.strftime ("%Y-%m-%d %H:%M"))
# 2019-03-01 14:45

问题 1:在 Windows 10、Python3 中运行此代码,我预期的输出是 2019-03-01 15:45:00 而不是 2019-03-01 14:45 :00+01:00。我尝试使用 strftime ("%Y-%m-%d %H:%M") 对其进行格式化,但这并没有成功。

问题 2:在 Raspberrypi(我将在完成后运行代码的地方)、Python3 中运行此代码,我在此行 madrid = dt.astimezone(madrid_tz) 中遇到 ValueError。错误是 ValueError: astimezone() cannot be applied to a naive datetime

有什么想法吗?

最佳答案

让我们更清楚地了解这里的内容:

madrid = pytz.timezone('Europe/Madrid')

欧洲/马德里时区,即 UTC+1/+2。

naive_ts = datetime.strptime('2019-03-01 14:45', '%Y-%m-%d %H:%M')

没有任何特定时区的简单时间戳。

madrid_ts = madrid.localize(naive_ts)

相同的时间戳,现在附加了欧洲/马德里时区,即马德里 14:45 (UTC+1)

utc_ts = madrid_ts.astimezone(pytz.utc)

14:45 in Madrid (UTC+1) 在 UTC 时间相同,因此,14:45 - 1 小时 → 13:45。 一切如预期。如果马德里时间为 14:45,则 UTC 时间为 13:45,因为马德里时间比 UTC 早一小时。

datetime.now()

无论那是什么……它与上面两个时间戳中的任何一个都无关,取决于您机器的默认时区和您执行此代码时的当前时间。

关于python - 模块 pytz : UTC decrease instead of increase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54947459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com