我正在比较两个具有不同时区的 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 ift.tzinfo
is notNone
andt.tzinfo.utcoffset(None)
does not returnNone
. 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/