Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #16899 -- Backported the fix for http://bugs.python.org/issue9063

… and added a test.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16980 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit f830166167833cfb7c990764f72373a9f4494259 1 parent 38999f7
@aaugustin aaugustin authored
Showing with 50 additions and 4 deletions.
  1. +3 −1 django/utils/tzinfo.py
  2. +47 −3 tests/regressiontests/utils/tzinfo.py
View
4 django/utils/tzinfo.py
@@ -57,7 +57,9 @@ def tzname(self, dt):
return None
def _isdst(self, dt):
- 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, 0)
try:
stamp = time.mktime(tt)
except (OverflowError, ValueError):
View
50 tests/regressiontests/utils/tzinfo.py
@@ -1,9 +1,35 @@
-import unittest
-
-from django.utils.tzinfo import FixedOffset
+import datetime
+import os
+import time
+from django.utils.tzinfo import FixedOffset, LocalTimezone
+from django.utils import unittest
class TzinfoTests(unittest.TestCase):
+ @classmethod
+ def setUpClass(cls):
+ cls.old_TZ = os.environ.get('TZ')
+ os.environ['TZ'] = 'US/Eastern'
+
+ try:
+ # Check if a timezone has been set
+ time.tzset()
+ cls.tz_tests = True
+ except AttributeError:
+ # No timezone available. Don't run the tests that require a TZ
+ cls.tz_tests = False
+
+ @classmethod
+ def tearDownClass(cls):
+ if cls.old_TZ is None:
+ del os.environ['TZ']
+ else:
+ os.environ['TZ'] = cls.old_TZ
+
+ # Cleanup - force re-evaluation of TZ environment variable.
+ if cls.tz_tests:
+ time.tzset()
+
def test_fixedoffset(self):
self.assertEqual(repr(FixedOffset(0)), '+0000')
self.assertEqual(repr(FixedOffset(60)), '+0100')
@@ -16,3 +42,21 @@ def test_fixedoffset(self):
self.assertEqual(repr(FixedOffset(5.5*60)), '+0530')
self.assertEqual(repr(FixedOffset(-.5*60)), '-0030')
self.assertEqual(repr(FixedOffset(.5*60)), '+0030')
+
+ def test_16899(self):
+ if not self.tz_tests:
+ return
+ ts = 1289106000
+ # Midnight at the end of DST in US/Eastern: 2010-11-07T05:00:00Z
+ dt = datetime.datetime.utcfromtimestamp(ts)
+ # US/Eastern -- we force its representation to "EST"
+ tz = LocalTimezone(dt + datetime.timedelta(days=1))
+ self.assertEqual(
+ repr(datetime.datetime.fromtimestamp(ts - 3600, tz)),
+ 'datetime.datetime(2010, 11, 7, 0, 0, tzinfo=EST)')
+ self.assertEqual(
+ repr(datetime.datetime.fromtimestamp(ts, tz)),
+ 'datetime.datetime(2010, 11, 7, 1, 0, tzinfo=EST)')
+ self.assertEqual(
+ repr(datetime.datetime.fromtimestamp(ts + 3600, tz)),
+ 'datetime.datetime(2010, 11, 7, 1, 0, tzinfo=EST)')
Please sign in to comment.
Something went wrong with that request. Please try again.