16

How would I get my python script to check whether or not a specific timezone that is stored in a variable using DST right now? My server is set to UTC. So I have say for instance

zonename = Pacific/Wallis

I want to run the query about if it is using DST right now and have the reply come back as either true of false.

Jonny Flowers
  • 631
  • 1
  • 9
  • 20

2 Answers2

19
from pytz import timezone
from datetime import datetime

zonename = "Pacific/Wallis"
now = datetime.now(tz=timezone(zonename))
dst_timedelta = now.dst()
### dst_timedelta is offset to the winter time, 
### thus timedelta(0) for winter time and timedelta(0, 3600) for DST; 
### it returns None if timezone is not set

print "DST" if dst_timedelta else "no DST"

alternative is to use:

now.timetuple().tm_isdst 

Which can have one of 3 values: 0 for no DST, 1 for DST and -1 for timezone not set.

vartec
  • 131,205
  • 36
  • 218
  • 244
  • my (independent) solution to [the duplicate question](http://stackoverflow.com/q/19774709/4279) is eerie similar (including variables names). – jfs Dec 22 '14 at 06:46
  • @J.F.Sebastian: *"There should be one— and preferably only one –obvious way to do it."* [PEP-20 aka The Zen of Python](https://www.python.org/dev/peps/pep-0020/) ;-) – vartec Dec 26 '14 at 04:11
  • 2
    that is why I love Python :) – jfs Dec 26 '14 at 04:16
  • How to distinguish tm_isdst=0 in case of a timezone currently not in DST, from the timezone that does not use DST at all? In: datetime.datetime.now(pytz.timezone('Asia/Kolkata')).timetuple().tm_isdst Out: 0 In: datetime.datetime.now(pytz.timezone('Australia/Melbourne')).timetuple().tm_isdst Out: 0 – Deepak May 28 '15 at 13:51
3

Python 3.9 has added the zoneinfo module which replaces pytz. Here is a new updated version for modern Python versions.

from zoneinfo import ZoneInfo
from datetime import datetime

bool(datetime.now(tz=ZoneInfo("America/Chicago")).dst())
ayao1337
  • 135
  • 1
  • 6