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 - 在 Windows 10 上使用 pip 安装 pytorch 时出错

python - 如何确保在子项在装饰器中覆盖它之前始终调用父方法?

python - 如何临时赋值成员变量?

php - 如何处理日期的不良数据?

postgresql - 在 Postgres SQL 查询的 WHERE 子句中指定日期的时区

python - 您如何在 Google App Engine (Python) 中定义配置变量/常量?

python - 如何在不知道行号的情况下将文件读取为以给定单词开头的字符串?

Python 同时循环、枚举和添加到字典

sql-server-2008 - 无法转换为日期时间的数据的查询列

python - 在同一端口上运行 Flask 和 Autobahn WAMP 服务器