python - 两个不同时区的 `time` 对象的比较

标签 python python-2.7 datetime time pytz

我正在比较两个具有不同时区的 time 对象,看起来它实际上忽略了时区,只测试小时/分钟/秒组件。

让我们创建两个 time 对象:

from datetime import time
import pytz

CET = pytz.timezone('CET')
Japan = pytz.timezone('Japan')

t1 = time(1,2,3, tzinfo=CET)
t2 = time(1,2,3, tzinfo=Japan)

打印它们,我们看到它们非常不同:

datetime.time(1, 2, 3, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)
datetime.time(1, 2, 3, tzinfo=<DstTzInfo 'Japan' JST+9:00:00 STD>)

现在,让我们比较一下:

t1 == t2
#-> True

嗯,什么? Python 怎么可能平等对待它们?

最佳答案

根据 https://docs.python.org/2/library/datetime.html#datetime.tzinfo,您的两个时间对象都是“幼稚的” :

A time object t is aware if t.tzinfo is not None and t.tzinfo.utcoffset(None) does not return None. Otherwise, t is naive.

print(t1.tzinfo, t1.tzinfo.utcoffset(None))
print(t2.tzinfo, t2.tzinfo.utcoffset(None))

给我们:

(<DstTzInfo 'CET' CET+1:00:00 STD>, None)
(<DstTzInfo 'Japan' JST+9:00:00 STD>, None)

https://docs.python.org/2/library/datetime.html#module-datetime

A naive object does not contain enough information to unambiguously locate itself relative to other date/time objects.


换句话说:对象没有日期,因此无法确定是否适用夏令时。它们是不明确的,运行 t.utcoffset() 将返回 None。这使得时区在比较中被完全忽略,因为它们实际上毫无意义。

关于python - 两个不同时区的 `time` 对象的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706527/

相关文章:

python - PySerial 客户端无法写入数据

python - 如果它至少包含一个字母,则将整个字符串与空格匹配

python - pycharm python3输入错误

mysql - Mysql无效的日期时间格式:1292创建一些用于测试的虚拟数据时,日期时间值不正确

python - Django Admin 挂起 nginx 端口 443

python - 基本的Python vlookup等效

python - Python 中的 ProcessPoolExecutor 和 Lock

python - SimpleHTTPServer 和 SocketServer

android - 如何在应用程序中获取android系统日期和时间格式

java - 无法将 UTC 转换为本地时间