如何在python中使不知情的日期时区知道
我需要做的是
我有一个时区不知情的datetime对象,为了能够将它与其他时区感知的datetime对象进行比较,我需要添加一个时区。我不想把我的整个应用程序转换成时区,不知道这个遗留情况。
我试过的
首先,为了证明这个问题:Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) [GCC 4.2.1 (Apple Inc. build 5646)] on darwinType "help", "copyright", "credits" or
"license" for more information.>>> import datetime>>> import pytz>>> unaware = datetime.datetime(2011,8,15,8,15,12,0)>>> unaware
datetime.datetime(2011, 8, 15, 8, 15, 12)>>> aware = datetime.datetime(2011,8,15,8,15,12,0,pytz.UTC)>>> aware
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=)>>> aware == unawareTraceback (most recent call last):
File "", line 1, in TypeError: can't compare offset-naive and offset-aware datetimes
首先,我尝试了astimezone:>>> unaware.astimezone(pytz.UTC)Traceback (most recent call last):
File "", line 1, in ValueError: astimezone() cannot be applied to a naive datetime>>>
这一点也不奇怪,因为它实际上是在尝试进行一次转换。替换似乎是一个更好的选择(如Python:如何获得datetime的值,即“时区感知”?):>>> unaware.replace(tzinfo=pytz.UTC)datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=)
>>> unaware == awareTraceback (most recent call last):
File "", line 1, in TypeError: can't compare offset-naive and offset-aware datetimes
>>>
但是正如您所看到的,替换似乎设置了tzinfo,但没有使对象意识到。我准备在解析输入字符串之前先修改输入字符串,使其具有一个时区(如果这重要的话,我将使用dateutil进行解析),但这似乎不可思议。
另外,我在python2.6和python2.7中都尝试过这一点,结果也是一样的。
语境
我正在为一些数据文件编写解析器。在日期字符串没有时区指示符的情况下,需要支持一种旧格式。我已经修复了数据源,但我仍然需要支持遗留数据格式。由于各种业务BS的原因,一次性转换遗留数据并不是一种选择。总的来说,我不喜欢硬编码默认时区的想法,在这种情况下,这似乎是最好的选择。我很有信心地知道所有的遗留数据都在UTC,所以在这种情况下,我准备接受违约的风险。