Improved LocalTimezone._isdst() to handle dates before approximately 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
This commit is contained in:
Adrian Holovaty 2008-07-18 03:45:30 +00:00
parent c4d0cfe1ee
commit f6fafc02c8
1 changed files with 11 additions and 3 deletions

View File

@ -60,9 +60,17 @@ class LocalTimezone(tzinfo):
tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1) tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1)
try: try:
stamp = time.mktime(tt) stamp = time.mktime(tt)
except OverflowError: except (OverflowError, ValueError):
# 32 bit systems can't handle dates after Jan 2038, so we fake it # 32 bit systems can't handle dates after Jan 2038, and certain
# in that case (since we only care about the DST flag here). # 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:] tt = (2037,) + tt[1:]
stamp = time.mktime(tt) stamp = time.mktime(tt)
tt = time.localtime(stamp) tt = time.localtime(stamp)