How can I get UTC offset from time zone name in python?
For example: I have Asia/Jerusalem
and I want to get +0200
Because of DST (Daylight Saving Time), the result depends on the time of the year:
import datetime, pytz
datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z')
# returns '+0300' (because 'now' they have DST)
pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')
# returns '+0200' (because in January they didn't have DST)
Have you tried using the pytz project and the utcoffset method?
e.g.
>>> import datetime
>>> import pytz
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
>>> pacific_now.utcoffset().total_seconds()/60/60
-7.0
I faced a similar issue while converting to UTC timestamp from python datetime object. My datetime was timezone agnostic (very naive) and as such astimezone
would not work.
To mitigate the issue, I made my datetime object timezone aware and then used the above magic.
import pytz
system_tz = pytz.timezone(constants.TIME_ZONE)
localized_time = system_tz.localize(time_of_meeting)
fmt = "%Y%m%dT%H%M%S" + 'Z'
return localized_time.astimezone(pytz.utc).strftime(fmt)
Here, constants.TIME_ZONE
is where I had the default timezone of my persisted objects.
Hope this helps someone attempting to convert python datetime objects to UTC. Once converted, format any way you please.