模块pytz:UTC减少而不是增加

     2023-02-23     38

关键词:

【中文标题】模块pytz:UTC减少而不是增加【英文标题】:Module pytz: UTC decrease instead of increase 【发布时间】:2019-07-23 15:40:49 【问题描述】:

编辑: 我想在我的国家 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

我需要马德里时间返回 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

有什么想法吗?

【问题讨论】:

2 小时轮班看起来像夏令时问题。 你为什么使用is_dst=None?有什么具体原因吗? 我会尝试local.localize(TheTime, is_dst=True),但这是在黑暗中拍摄 【参考方案1】:

我认为您误解了 localizeastimezone,因为您使用 localize 在欧洲/马德里时区创建 2019-03-01 14:45 日期时间对象,然后使用 @ 将其转换为 UTC 987654324@ 给你意想不到的结果。

相反,您似乎打算为 2019-03-01 14:45 创建一个日期时间对象,然后您想以欧洲/马德里时间和 UTC 时间显示该日期时间。您可以使用astimezonelocalize 来获得所需的结果。

astimezone 示例:

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 15:45:00+01:00

utc = dt.astimezone(pytz.utc)
print(utc)
# 2019-03-01 14:45:00+00:00

localize 示例(请注意,datetime 对象是在每个时区对应的时间创建的,因此两者将代表相同的时间点):

import datetime
import pytz

madrid_tz = pytz.timezone('Europe/Madrid')
madrid = madrid_tz.localize(datetime.datetime(2019, 3, 1, 15, 45))
print(madrid)
# 2019-03-01 15:45:00+01:00

utc = pytz.utc.localize(datetime.datetime(2019, 3, 1, 14, 45))
print(utc)
# 2019-03-01 14:45:00+00:00

【讨论】:

感谢您的赞誉!但是我怎样才能得到 15:45 而不是 14:15 + 01:00?? @DaniLA - 你可以使用strftime 来设置你喜欢的输出格式。 怎么样?如果我这样做 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 @DaniLA - 你是如何初始化dt的?如果您按照答案中所示的方式进行操作,您将不会从print(madrid)获得 2019-03-01 14:45:00+01:00@ 我只是复制粘贴了您的“astimezone 示例”,但我的输出与您的不同。我的是 2019-03-01 14:45:00+01:00 和 2019-03-01 13:45:00+00:00 。我必须说我正在 windows 的 python3 中测试这个。如果我在我的 raspberrypi(也在 python3 中)执行您的 astimezone 示例,则在执行 madrid = dt.astimezone(madrid_tz) 时会收到类似 ValueError: astimezone() cannot be applied to a naive datetime 的错误。我很困惑......【参考方案2】:

让我们更清楚一点:这里是什么:

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 (UTC+1) UTC 的时间相同,因此,14:45 - 1 小时 → 13:45。 一切正常。如果马德里是 14:45,那么 UTC 就是 13:45,因为马德里比 UTC 早一小时。

datetime.now()

不管是什么……它与上述两个时间戳中的任何一个都无关,并且取决于您机器的默认时区以及您执行此代码时所在的当前时间。

【讨论】:

嗨@deceze,我认为错误在我的代码中,我刚刚编辑了我的问题以澄清我需要什么。 然后了解 naïve 日期时间(没有时区、模糊信息)和 aware 日期时间(有时区信息)之间的区别。您的 localize 将时区附加到天真的日期时间,然后您将其转换为不同的时区。如果你想从 UTC 转换到马德里,你需要反过来做。

python / pytz问题从本地时区转换为UTC然后返回

...戳。奇怪的是,当从UTC转换回本地时,python决定它是PDT而不是原始PST,因此转换后的日期增加了一个小时。有人可以向我 查看详情

Python & pytz:确定时区是不是支持 DST 以及 DST 和非 DST UTC 偏移量是多少

】Python&pytz:确定时区是不是支持DST以及DST和非DSTUTC偏移量是多少【英文标题】:Python&pytz:FigureoutifatimezonesupportsDSTandwhattheDSTandnon-DSTUTCoffsetsarePython&pytz:确定时区是否支持DST以及DST和非DSTUTC偏移量是多少【发布时间】:2... 查看详情

pytz.utc 和 dt.timezone.utc 有啥区别?

】pytz.utc和dt.timezone.utc有啥区别?【英文标题】:What\'sthedifferencebetweenpytz.utcanddt.timezone.utc?pytz.utc和dt.timezone.utc有什么区别?【发布时间】:2016-01-1921:57:32【问题描述】:我正在编写一个库,我不想使用pytz,因为库本身不知道也... 查看详情

pytz UTC 转换

】pytzUTC转换【英文标题】:pytzutcconversion【发布时间】:2010-11-2408:52:14【问题描述】:将幼稚时间和tzinfo转换为UTC时间的正确方法是什么?说我有:d=datetime(2009,8,31,22,30,30)tz=timezone(\'US/Pacific\')第一种方式,pytz启发:d_tz=tz.normalize... 查看详情

当 pytz.timezone() 传递给 tzinfo 时,pytz 返回 LMT 时区而不是 GMT

】当pytz.timezone()传递给tzinfo时,pytz返回LMT时区而不是GMT【英文标题】:pytzreturnsLMTtimezoneinsteadofGMTwhenpytz.timezone()passedtotzinfo【发布时间】:2021-09-1423:05:45【问题描述】:fromdatetimeimportdatetimefrompytzimporttimezoned1=datetime.now(tz=ti 查看详情

来自 UTC 偏移的 Pytz 时区

】来自UTC偏移的Pytz时区【英文标题】:PytzTimezonefromUTCoffset【发布时间】:2018-02-1216:31:38【问题描述】:我在Python中使用Facebook的图形API。对于任何user_id,它将用户的时区作为一个浮点数给出,表示与UTC的偏移量。示例:对于印... 查看详情

如何使用 pytz 从时区字符串中获取 UTC 偏移量?

】如何使用pytz从时区字符串中获取UTC偏移量?【英文标题】:HowtogettheUTCoffsetfromatimezonestringusingpytz?【发布时间】:2019-04-0807:02:02【问题描述】:我正在尝试使用Python库pytz从我的时区获取UTC偏移量作为字符串。我是这样定义的:... 查看详情

使用 pytz 从 UTC 偏移“规范”?

】使用pytz从UTC偏移“规范”?【英文标题】:"Canonical"offsetfromUTCusingpytz?【发布时间】:2015-02-1400:25:47【问题描述】:我很好奇如何调用某些时区选择器上提供的“规范”时区偏移量(如果甚至有这样的东西,作为规范偏... 查看详情

Python pytz:不存在的时间得到 AmbiguousTimeError,而不是 NonExistentTimeError

】Pythonpytz:不存在的时间得到AmbiguousTimeError,而不是NonExistentTimeError【英文标题】:Pythonpytz:non-existenttimegetsAmbiguousTimeError,notNonExistentTimeError【发布时间】:2012-11-0204:45:13【问题描述】:如何判断当地时间是否不存在?我正在尝... 查看详情

使用 freezegun,为啥 pytz.utc 和 utcnow() 输出不同的日期时间?

】使用freezegun,为啥pytz.utc和utcnow()输出不同的日期时间?【英文标题】:Usingfreezegun,whydopytz.utcandutcnow()outputdifferentdatetimes?使用freezegun,为什么pytz.utc和utcnow()输出不同的日期时间?【发布时间】:2015-09-2012:38:52【问题描述】:我... 查看详情

使用 pytz 将 UTC 转换为其他地方的本地时间

】使用pytz将UTC转换为其他地方的本地时间【英文标题】:ConvertingUTCtolocaltimesomewhereelsebyusingpytz【发布时间】:2021-08-0205:04:57【问题描述】:我正在尝试将sun和f变量都转换为日本的当地时间。我的代码仍然以UTC格式给出输出。ifni... 查看详情

何时使用 datetime.utcnow() 或 datetime.now(tz=pytz.utc).replace(tzinfo=None)

】何时使用datetime.utcnow()或datetime.now(tz=pytz.utc).replace(tzinfo=None)【英文标题】:Whentousedatetime.utcnow()ordatetime.now(tz=pytz.utc).replace(tzinfo=None)【发布时间】:2017-07-1423:06:20【问题描述】:我想知道什么时候应该使用datetime.now(tz=pytz.utc). 查看详情

为啥 pytz 在跨越 TZ 和 DST 边界而不是 TZ 名称时正确调整时间和偏移量?

】为啥pytz在跨越TZ和DST边界而不是TZ名称时正确调整时间和偏移量?【英文标题】:Whydoespytzcorrectlyadjusttime&offsetwhencrossingTZ&DSTboundariesbutnottheTZname?为什么pytz在跨越TZ和DST边界而不是TZ名称时正确调整时间和偏移量?【发布时... 查看详情

Pytz 在没有 DST 的情况下将时间转换为 UTC

】Pytz在没有DST的情况下将时间转换为UTC【英文标题】:PytzconverttimetoUTCwithoutDST【发布时间】:2018-06-2712:42:34【问题描述】:在发布此内容之前,我已经进行了大量研究,但我似乎无法正确转换。我有一些带有时间戳的数据,有... 查看详情

使用 pytz 时区时 Python 日期时间不包括 DST

...但是,在创建以瑞典为时区的日期时间时,它会获取CET而不是CEST。这是为什么呢?>>>#Modifiedforreadabil 查看详情

UTC到CST时间转换使用pytz python包

】UTC到CST时间转换使用pytzpython包【英文标题】:UTCtoCSTtimeconversionusingpytzpythonpackage【发布时间】:2020-09-0123:47:38【问题描述】:我有嵌套的json文件,该文件具有UTC格式的时区下面贴出代码defextract_json_data(fpath):print("Extracting"+fpath)... 查看详情

如何在 python 和 django 中使用 Pytz 根据给定的 UTC 偏移量转换数据和时间?

】如何在python和django中使用Pytz根据给定的UTC偏移量转换数据和时间?【英文标题】:HowtoconvertthedataandtimeaccordingtogivenUTCoffsetusingPytzinpython&django?【发布时间】:2012-06-0316:09:17【问题描述】:我想使用Pytz根据给定的UTC偏移量转... 查看详情

Python pytz:将本地时间转换为 UTC。本地化似乎没有转换

】Pythonpytz:将本地时间转换为UTC。本地化似乎没有转换【英文标题】:Pythonpytz:convertlocaltimetoutc.Localizedoesn\'tseemtoconvert【发布时间】:2012-11-0100:12:23【问题描述】:我有一个将日期时间存储为UTC的数据库。我需要查找特定时间的... 查看详情