具有不同时区的两个"时间"对象的比较

kol*_*pto 7 python time datetime pytz python-2.7

我正在比较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)
Run Code Online (Sandbox Code Playgroud)

打印它们,我们发现它们非常不同:

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>)
Run Code Online (Sandbox Code Playgroud)

现在,让我们比较一下:

t1 == t2
#-> True
Run Code Online (Sandbox Code Playgroud)

恩,什么?Python如何将它们视为平等?

use*_*918 7

根据https://docs.python.org/2/library/datetime.html#datetime.tzinfo,你的两个时间对象都是"天真的" :

一个time对象牛逼意识到,如果t.tzinfoNonet.tzinfo.utcoffset(None)不返回None.否则,牛逼是幼稚的.

print(t1.tzinfo, t1.tzinfo.utcoffset(None))
print(t2.tzinfo, t2.tzinfo.utcoffset(None))
Run Code Online (Sandbox Code Playgroud)

给我们:

(<DstTzInfo 'CET' CET+1:00:00 STD>, None)
(<DstTzInfo 'Japan' JST+9:00:00 STD>, None)
Run Code Online (Sandbox Code Playgroud)

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

一个天真的对象不包含足够的信息来明确地相对于其他日期/时间对象定位自己.


换句话说:对象没有日期,因此无法确定夏令时是否适用.他们很暧昧,t.utcoffset()任何一个人都会回来None.这使得时区在比较中完全被忽略,因为它们实际上毫无意义.