Whenever I give a talk about time zones, someone comes up to me
afterwards and tells me that they have broken code currently in
production, because they misunderstood how pytz
works. This is
because pytz uses its own non-standard interface for handling time
zone information that is partially but not entirely compatible with
the way Python's datetime
library was intended to work, which
leads to a lot of confusion from people naively using pytz
as a time
zone provider. This incompatibility is why, as of Python 3.6, the
tzinfo
documentation
recommends dateutil.tz
rather than pytz
as an IANA time zone
provider. [1]
In this post, I will cover both time zone models and if I cannot
convince you to switch to
dateutil.tz
, at least
provide some intuition about the differences between pytz
and the
standard time zone model.