Timezones are variables that hold a value of duration of time (i.e. timedelta), which can be used to calculate how far ahead or behind another time zone is.
datetime.timezone()
import datetime pacific = datetime.timezone(datetime.timedelta(hours=-8)) eastern = datetime.timezone(datetime.timedelta(hours=-5))
Aware & Naive
We say that a date time object that knows its time zone, is aware, and those that don’t are naive.
naive = datetime.datetime(2014, 4, 21, 9) naive datetime.datetime(2014, 4, 21, 9)
To make a datetime object aware:
- Create a timezone object,
- Pass timezone object to the datetime instance.
pacific = datetime.timezone(datetime.timedelta(hours=-8)) # Step 1 aware = datetime.datetime(2014, 4, 21, 9, tzinfo=pacific) # Step 2 awaredatetime.datetime(2014, 4, 21, 9, tzinfo=datetime.timezone(datetime.timedelta(-1,57600)))
Convert Timezones (manually)
In this conversion method, using astimezone(), we have to know how far ahead or behind each time zone is.
astimezone() only works with aware date time objects.
eastern = datetime.timezone(datetime.timedelta(hours=-5)) naive.astimezone(eastern) <ERROR!> aware = datetime.datetime(2014, 4, 21, 9, tzinfo=pacific) aware.astimezone(eastern) aware datetime.datetime(2014, 4, 21, 12, tzinfo=datetime.timezone(datetime.timedelta(-1,57600)))
auckland = datetime.timezone(datetime.timedelta(hours=13)) aware.astimezone(auckland) datetime.datetime(2014, 4, 22, 6, tzinfo=datetime.timezone(datetime.timedelta(0,46800)))
mumbai = datetime.timezone(datetime.timedelta(hours=5,minutes=30)) aware.astimezone(mumbai) datetime.datetime(2014, 4, 21, 22, 30, tzinfo=datetime.timezone(datetime.timedelta(0,19800)))