mindthief mindthief - 1 year ago 120
Python Question

Python: How to get a value of datetime.today() that is "timezone aware"?

I am trying to subtract one date value from the value of

to calculate how long ago something was. But it complains:

TypeError: can't subtract offset-naive and offset-aware datetimes

The value
doesn't seem to be "timezone aware", while my other date value is. How do I get a value of
that is timezone aware? Right now it's giving me the time in local time, which happens to be PST, i.e. UTC-8hrs. Worst case, is there a way I can manually enter a timezone value into the
object returned by
and set it to UTC-8? Of course, the ideal solution would be for it to automatically know the timezone.

Answer Source

In the standard library, there is no cross-platform way to create aware timezones without creating your own timezone class.

On Windows, there's win32timezone.utcnow(), but that's part of pywin32. I would rather suggest to use the pytz library, which has an up-to-date database of most timezones.

Working with local timezones can be very tricky (read the pytz documentation!), so you may rather want to use UTC throughout your application. You can get the current date/time like so:

import pytz
from datetime import datetime

Mind that datetime.today() and datetime.now() return the local time, not the UTC time, so applying .replace(tzinfo=pytz.utc) to them would not be correct.

Another nice way to do it is:


which is a bit shorter and does the same.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download