Skip to content

Commit

Permalink
Improved LocalTimezone._isdst() to handle dates before approximately …
Browse files Browse the repository at this point in the history
…1901-12-01 (the specific cutoff date is platform-specific). Refs #1443

git-svn-id: http://code.djangoproject.com/svn/django/trunk@7945 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
adrianholovaty committed Jul 18, 2008
1 parent c4d0cfe commit f6fafc0
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions django/utils/tzinfo.py
Expand Up @@ -60,9 +60,17 @@ def _isdst(self, dt):
tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1)
try:
stamp = time.mktime(tt)
except OverflowError:
# 32 bit systems can't handle dates after Jan 2038, so we fake it
# in that case (since we only care about the DST flag here).
except (OverflowError, ValueError):
# 32 bit systems can't handle dates after Jan 2038, and certain
# systems can't handle dates before ~1901-12-01:
#
# >>> time.mktime((1900, 1, 13, 0, 0, 0, 0, 0, 0))
# OverflowError: mktime argument out of range
# >>> time.mktime((1850, 1, 13, 0, 0, 0, 0, 0, 0))
# ValueError: year out of range
#
# In this case, we fake the date, because we only care about the
# DST flag.
tt = (2037,) + tt[1:]
stamp = time.mktime(tt)
tt = time.localtime(stamp)
Expand Down

0 comments on commit f6fafc0

Please sign in to comment.