如何在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=<UTC>)>>> aware == unawareTraceback (most recent call last):
File "<stdin>", line 1, in <module>TypeError: can't compare offset-naive and offset-aware datetimes首先,我尝试了astimezone:>>> unaware.astimezone(pytz.UTC)Traceback (most recent call last):
File "<stdin>", line 1, in <module>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=<UTC>)
>>> unaware == awareTraceback (most recent call last):
File "<stdin>", line 1, in <module>TypeError: can't compare offset-naive and offset-aware datetimes
>>>但是正如您所看到的,替换似乎设置了tzinfo,但没有使对象意识到。我准备在解析输入字符串之前先修改输入字符串,使其具有一个时区(如果这重要的话,我将使用dateutil进行解析),但这似乎不可思议。另外,我在python2.6和python2.7中都尝试过这一点,结果也是一样的。语境我正在为一些数据文件编写解析器。在日期字符串没有时区指示符的情况下,需要支持一种旧格式。我已经修复了数据源,但我仍然需要支持遗留数据格式。由于各种业务BS的原因,一次性转换遗留数据并不是一种选择。总的来说,我不喜欢硬编码默认时区的想法,在这种情况下,这似乎是最好的选择。我很有信心地知道所有的遗留数据都在UTC,所以在这种情况下,我准备接受违约的风险。
3 回答
呼如林
TA贡献1798条经验 获得超3个赞
import datetimeimport pytz unaware = datetime.datetime(2011, 8, 15, 8, 15, 12, 0)aware = datetime.datetime(2011, 8, 15, 8, 15, 12, 0, pytz.UTC) now_aware = pytz.utc.localize(unaware)assert aware == now_aware
localize
now_aware = unaware.replace(tzinfo=pytz.UTC)
.replace
unaware
.)
守着星空守着你
TA贡献1799条经验 获得超8个赞
from datetime import datetimefrom datetime import timezone dt = datetime.now()dt.replace(tzinfo=timezone.utc)print(dt.replace(tzinfo=timezone.utc).isoformat())'2017-01-12T22:11:31+00:00'
try: from datetime import timezone utc = timezone.utcexcept ImportError: #Hi there python2 user class UTC(tzinfo): def utcoffset(self, dt): return timedelta(0) def tzname(self, dt): return "UTC" def dst(self, dt): return timedelta(0) utc = UTC()
jeck猫
TA贡献1909条经验 获得超7个赞
dt_unaware = dt_aware.replace(tzinfo=None)
from pytz import timezone localtz = timezone('Europe/Lisbon')dt_aware = localtz.localize(dt_unware)
添加回答
举报
0/150
提交
取消