Python datetime和tzinfo对象(更改分钟而不是小时)

2024-06-15 00:16:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将tzinfo应用于datetime对象。在

In [1]: from datetime import datetime
In [2]: import pytz

In [3]: london = pytz.timezone("Europe/London")
In [4]: london
Out[5]: <DstTzInfo 'Europe/London' LMT-1 day, 23:59:00 STD>

In [6]: localized_date_object = datetime(2016, 1, 1, 11, 30, 0, 5000, london)
In [7]: localized_date_object
Out[8]: datetime.datetime(2016, 1, 1, 11, 30, 0, 5000, tzinfo=<DstTzInfo 'Europe/London' LMT-1 day, 23:59:00 STD>)

In [9]: utc_date_object = localized_date_object.astimezone(pytz.utc)
In [10]: utc_date_object
Out[11]: datetime.datetime(2016, 1, 1, 11, 31, 0, 5000, tzinfo=<UTC>)

In [16]: paris = pytz.timezone("Europe/Paris")
In [17]: localized_date_object = datetime(2016, 1, 1, 11, 30, 0, 5000, paris)
In [18]: utc_date_object = localized_date_object.astimezone(pytz.utc)
In [19]: utc_date_object
Out[19]: datetime.datetime(2016, 1, 1, 11, 21, 0, 5000, tzinfo=<UTC>)

如您所见,它将增量应用于分钟而不是小时。
有人能解释一下我做错了什么吗。在


Tags: inimportdatetimedateobjectoutlocalizedutc
3条回答

欧洲/伦敦时区在UTC 1分钟之后。欧洲/巴黎时区比UTC早9分钟。伦敦和巴黎在地理上接近格林威治,所以时区偏移很小。在

如果你尝试

pytz.timezone("Asia/Shanghai")

,您将看到时间变化。在

我认为巴黎时间用CET,伦敦时间用UTC。 我使用的方法有点不同,但它对我有效:

from datetime import datetime
from pytz import timezone

ldo = datetime(2016, 1, 1, 11, 30, 0, 5000)
ldo = ldo.replace(tzinfo=timezone('Europe/London'))

udo = ldo.astimezone(timezone('UTC'))
print ldo
print udo

ldo = datetime(2016, 1, 1, 11, 30, 0, 5000)
ldo = ldo.replace(tzinfo=timezone('CET'))

udo = ldo.astimezone(timezone('UTC'))
print ldo
print udo

更新:

存储时间值时,还应存储相关时区信息。IMO的最佳实践是以UTC格式存储所有内容,并将其转换为“用户”时区以供查看。顺便说一句,从UTC转换到欧洲/巴黎可以完美地工作,请尝试以下操作:

^{pr2}$

在第5行中,它显示了一个奇怪的输出-<DstTzInfo 'Europe/London' LMT-1 day, 23:59:00 STD>,似乎是一分钟的轮班(减1天+23:59:00小时)。在

我建议您尝试pytz中的其他几个时区定义来查看它们的声明。在

相关问题 更多 >