Commits

adr...@bcc190cf-cafb-0310-a4f2-bffc1f526a37  committed ae5e355

Improved LocalTimezone._isdst() to handle dates before approximately 1901-12-01 (the specific cutoff date is platform-specific). Refs #1443

  • Participants
  • Parent commits 2186651

Comments (0)

Files changed (1)

File django/utils/tzinfo.py

         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)