将不可感知的时间戳转换为可感知时间戳以进行UTC转换



我使用下面的代码创建了一个不知道的日期时间,我需要使用UTC,因为时间是"美国/东方"。我想先让日期时间知道EST,然后转换为UTC。

import datetime
import pytz
from pytz import timezone
dt = "8/8/2013 4:05:03 PM"
dt = datetime.datetime.strptime(dt,"%m/%d/%Y %I:%M:%S %p")
unaware_est = dt.strftime("%Y-%m-%dT%H:%M:%S")
localtz = timezone('US/Eastern')
utc = localtz.localize(unaware_est)

错误消息:

Traceback (most recent call last):
  File "/home/ubuntu/workspace/druidry-codebase/services/xignite/test.py", line 120, in <module>
    quote_time = localtz.localize(quote_time)
  File "/usr/local/lib/python2.7/dist-packages/pytz-2013b-py2.7.egg/pytz/tzinfo.py", line 303, in localize
    if dt.tzinfo is not None:
AttributeError: 'str' object has no attribute 'tzinfo'

localize方法采用datetime,而不是字符串。因此,应该删除对strftime的调用。

import datetime
import pytz
from pytz import timezone
dt = "8/8/2013 4:05:03 PM"
unaware_est = datetime.datetime.strptime(dt,"%m/%d/%Y %I:%M:%S %p")
localtz = timezone('US/Eastern')
aware_est = localtz.localize(unaware_est)

这仍然不能给你UTC。如果你想要,你需要跟进:

utc = aware_est.astimezone(pytz.utc)

Python字符串和日期时间对象是不可交换的。您需要明确地转换它们:

from datetime import datetime
import pytz # $ pip install pytz
# convert the time string to a datetime object
dt_str = "8/8/2013 4:05:03 PM"
unaware_est = datetime.strptime(dt_str,"%m/%d/%Y %I:%M:%S %p")
# make it a timezone-aware datetime object 
aware_est = pytz.timezone('US/Eastern').localize(unaware_est, is_dst=None)
# convert it to utc timezone
utc_dt = aware_est.astimezone(pytz.utc) # `.normalize()` is not necessary for UTC
# convert it to a string
print(utc_dt.strftime("%Y-%m-%dT%H:%M:%SZ")) # -> 2013-08-08T20:05:03Z

注意:is_dst=None断言输入本地时间存在,并且它是不确定的。查看当地时间的问题。

最新更新