convert timezone python
from datetime import datetime
from pytz import timezone, all_timezones
# must read else Bug:
# https://blog.ganssle.io/articles/2018/03/pytz-fastest-footgun.html
# aware dt-obj
dt_obj = datetime.strptime('2021-05-19T01:55:10+0000', '%Y-%m-%dT%H:%M:%S%z')
# double confirmaiton: aware dt-obj
dt_obj.tzinfo
# correct
dt_obj.astimezone(timezone('US/Pacific'))
# correct
dt_obj.replace(tzinfo=timezone('UTC')).astimezone(timezone('US/Pacific'))
# confirmation: desired tz
dt_obj.replace(tzinfo=timezone('UTC')).astimezone(timezone('US/Pacific')).tzinfo
# ~~~~~~~
# naive datetime object
datetime.utcnow()
# confirmation: naive dt-obj
print(datetime.utcnow().tzinfo)
# incorrect because started with naive datetime object
datetime.utcnow().astimezone(timezone('US/Pacific'))
# correct because add/replace tzinfo of initial dt-obj before conversion to desired tz
# SEE article link above. The following is probably correct only bc starting w/ utc.
datetime.utcnow().replace(tzinfo=timezone('UTC')).astimezone(timezone('US/Pacific'))
# confirmation: aware dt-obj
datetime.utcnow().replace(tzinfo=timezone('UTC')).astimezone(timezone('US/Pacific')).tzinfo
from dateutil import tz
dt=datetime(2018, 11, 1,20,0,0)
print(dt)
# 2018-11-01 20:00:00
print(dt.replace(tzinfo=tz.gettz('UTC')).astimezone(tz.gettz('US/Eastern')))
# 2018-11-01 16:00:00-04:00
print(datetime(2018, 11, 1,20,0,0,tzinfo=tz.gettz('UTC')).astimezone(tz.gettz('US/Eastern')))
# 2018-11-01 16:00:00-04:00
print(dt.replace(tzinfo=timezone('UTC')).astimezone(timezone('US/Eastern')))
# 2018-11-01 16:00:00-04:00
print(datetime(2018, 11, 1,20,0,0,tzinfo=timezone('UTC')).astimezone(timezone('US/Eastern')))
# 2018-11-01 16:00:00-04:00
print(timezone('UTC').localize(dt).astimezone(timezone('US/Eastern')))
# 2018-11-01 16:00:00-04:00
# ~~ VS ~~
dt=datetime(2018, 11, 1,16,0,0)
print(dt)
# 2018-11-01 16:00:00
print(dt.replace(tzinfo=tz.gettz('US/Eastern')).astimezone(tz.gettz('US/Pacific')))
# 2018-11-01 13:00:00-07:00
print(datetime(2018, 11, 1,16,0,0,tzinfo=tz.gettz('US/Eastern')).astimezone(tz.gettz('US/Pacific')))
# 2018-11-01 13:00:00-07:00
print(dt.replace(tzinfo=timezone('US/Eastern')).astimezone(timezone('US/Pacific'))) # Bug vector
# 2018-11-01 13:56:00-07:00 # incorrect!
print(datetime(2018, 11, 1,16,0,0,tzinfo=timezone('US/Eastern')).astimezone(timezone('US/Pacific'))) # Bug vector
# 2018-11-01 13:56:00-07:00 # incorrect!
print(timezone('US/Eastern').localize(dt).astimezone(timezone('US/Pacific')))
# 2018-11-01 13:00:00-07:00
# ~~~~~~~~~~~
# len(all_timezones) == 593
for zone in all_timezones:
print(zone)