tzinfo.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import copy
  2. import datetime
  3. import os
  4. import pickle
  5. import time
  6. from django.utils.tzinfo import FixedOffset, LocalTimezone
  7. from django.utils import unittest
  8. class TzinfoTests(unittest.TestCase):
  9. @classmethod
  10. def setUpClass(cls):
  11. cls.old_TZ = os.environ.get('TZ')
  12. os.environ['TZ'] = 'US/Eastern'
  13. try:
  14. # Check if a timezone has been set
  15. time.tzset()
  16. cls.tz_tests = True
  17. except AttributeError:
  18. # No timezone available. Don't run the tests that require a TZ
  19. cls.tz_tests = False
  20. @classmethod
  21. def tearDownClass(cls):
  22. if cls.old_TZ is None:
  23. del os.environ['TZ']
  24. else:
  25. os.environ['TZ'] = cls.old_TZ
  26. # Cleanup - force re-evaluation of TZ environment variable.
  27. if cls.tz_tests:
  28. time.tzset()
  29. def test_fixedoffset(self):
  30. self.assertEqual(repr(FixedOffset(0)), '+0000')
  31. self.assertEqual(repr(FixedOffset(60)), '+0100')
  32. self.assertEqual(repr(FixedOffset(-60)), '-0100')
  33. self.assertEqual(repr(FixedOffset(280)), '+0440')
  34. self.assertEqual(repr(FixedOffset(-280)), '-0440')
  35. self.assertEqual(repr(FixedOffset(-78.4)), '-0118')
  36. self.assertEqual(repr(FixedOffset(78.4)), '+0118')
  37. self.assertEqual(repr(FixedOffset(-5.5*60)), '-0530')
  38. self.assertEqual(repr(FixedOffset(5.5*60)), '+0530')
  39. self.assertEqual(repr(FixedOffset(-.5*60)), '-0030')
  40. self.assertEqual(repr(FixedOffset(.5*60)), '+0030')
  41. def test_16899(self):
  42. if not self.tz_tests:
  43. return
  44. ts = 1289106000
  45. # Midnight at the end of DST in US/Eastern: 2010-11-07T05:00:00Z
  46. dt = datetime.datetime.utcfromtimestamp(ts)
  47. # US/Eastern -- we force its representation to "EST"
  48. tz = LocalTimezone(dt + datetime.timedelta(days=1))
  49. self.assertEqual(
  50. repr(datetime.datetime.fromtimestamp(ts - 3600, tz)),
  51. 'datetime.datetime(2010, 11, 7, 0, 0, tzinfo=EST)')
  52. self.assertEqual(
  53. repr(datetime.datetime.fromtimestamp(ts, tz)),
  54. 'datetime.datetime(2010, 11, 7, 1, 0, tzinfo=EST)')
  55. self.assertEqual(
  56. repr(datetime.datetime.fromtimestamp(ts + 3600, tz)),
  57. 'datetime.datetime(2010, 11, 7, 1, 0, tzinfo=EST)')
  58. def test_copy(self):
  59. now = datetime.datetime.now()
  60. self.assertIsInstance(copy.copy(FixedOffset(90)), FixedOffset)
  61. self.assertIsInstance(copy.copy(LocalTimezone(now)), LocalTimezone)
  62. def test_deepcopy(self):
  63. now = datetime.datetime.now()
  64. self.assertIsInstance(copy.deepcopy(FixedOffset(90)), FixedOffset)
  65. self.assertIsInstance(copy.deepcopy(LocalTimezone(now)), LocalTimezone)
  66. def test_pickling_unpickling(self):
  67. now = datetime.datetime.now()
  68. self.assertIsInstance(pickle.loads(pickle.dumps(FixedOffset(90))), FixedOffset)
  69. self.assertIsInstance(pickle.loads(pickle.dumps(LocalTimezone(now))), LocalTimezone)