5

我使用下面的代码创建了一个不知道的日期时间,我需要在 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'
4

2 回答 2

7

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)
于 2013-08-11T20:59:39.763 回答
4

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断言输入的本地时间存在并且是明确的。查看当地时间的问题

于 2013-08-16T12:01:12.910 回答