Converting an un-aware timestamp into an aware timestamp for UTC conversion

Tampa picture Tampa · Aug 11, 2013 · Viewed 15.9k times · Source

I created a datetime that is unaware using the code below and I need to have it in UTC since the time is in "US/Eastern". I would like to make the datetime aware of EST first then convert to 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)

Error Message:

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'

Answer

Matt Johnson-Pint picture Matt Johnson-Pint · Aug 11, 2013

The localize method takes a datetime, not a string. So the call to strftime should be removed.

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)

This still doesn't give you UTC. If you want that, you need to follow it up with:

utc = aware_est.astimezone(pytz.utc)