Index: test_datetime.py =================================================================== --- test_datetime.py (revision 82605) +++ test_datetime.py (working copy) @@ -153,6 +153,15 @@ timezone.min, timezone.max]: self.assertEqual(str(tz), tz.tzname(None)) + def test_repr(self): + import datetime + for tz in [self.ACDT, self.EST, timezone.utc, + timezone.min, timezone.max]: + # test round-trip + tzrep = repr(tz) + self.assertEqual(tz, eval(tzrep)) + + def test_class_members(self): limit = timedelta(hours=23, minutes=59) self.assertEqual(timezone.utc.utcoffset(None), ZERO) Index: datetime.py =================================================================== --- datetime.py (revision 82605) +++ datetime.py (working copy) @@ -705,7 +705,16 @@ # Conversions to string def __repr__(self): - "Convert to formal string, for repr()." + """Convert to formal string, for repr(). + + >>> dt = datetime(2010, 1, 1) + >>> repr(dt) + 'datetime.datetime(2010, 1, 1, 0, 0)' + + >>> dt = datetime(2010, 1, 1, tzinfo=timezone.utc) + >>> repr(dt) + 'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)' + """ return "%s(%d, %d, %d)" % ('datetime.' + self.__class__.__name__, self._year, self._month, @@ -1524,7 +1533,7 @@ return s def __repr__(self): - "Convert to formal string, for repr()." + """Convert to formal string, for repr().""" L = [self._year, self._month, self._day, # These are never zero self._hour, self._minute, self._second, self._microsecond] if L[-1] == 0: @@ -1813,6 +1822,24 @@ def __hash__(self): return hash(self._offset) + def __repr__(self): + """Convert to formal string, for repr(). + + >>> tz = timezone.utc + >>> repr(tz) + 'datetime.timezone.utc' + >>> tz = timezone(timedelta(hours=-5), 'EST') + >>> repr(tz) + "datetime.timezone(datetime.timedelta(-1, 68400), 'EST')" + """ + if self is self.utc: + return 'datetime.timezone.utc' + if self._name is None: + return "%s(%r)" % ('datetime.' + self.__class__.__name__, + self._offset) + return "%s(%r, %r)" % ('datetime.' + self.__class__.__name__, + self._offset, self._name) + def __str__(self): return self.tzname(None)