Index: Lib/calendar.py =================================================================== --- Lib/calendar.py (revision 81758) +++ Lib/calendar.py (working copy) @@ -587,17 +587,12 @@ EPOCH = 1970 -_EPOCH_ORD = datetime.date(EPOCH, 1, 1).toordinal() +_EPOCH_DATETIME = datetime.datetime(EPOCH, 1, 1) +_SECOND = datetime.timedelta(seconds=1) - def timegm(tuple): """Unrelated but handy function to calculate Unix timestamp from GMT.""" - year, month, day, hour, minute, second = tuple[:6] - days = datetime.date(year, month, 1).toordinal() - _EPOCH_ORD + day - 1 - hours = days*24 + hour - minutes = hours*60 + minute - seconds = minutes*60 + second - return seconds + return (datetime.datetime(*tuple[:6]) - _EPOCH_DATETIME) // _SECOND def main(args): Index: Lib/test/test_calendar.py =================================================================== --- Lib/test/test_calendar.py (revision 81758) +++ Lib/test/test_calendar.py (working copy) @@ -2,8 +2,8 @@ import unittest from test import support +import time - result_2004_text = """ 2004 @@ -381,13 +381,21 @@ # A 31-day december starting on friday (2+7+7+7+7+1 days) self.check_weeks(1995, 12, (2, 7, 7, 7, 7, 1)) +class TimegmTestCase(unittest.TestCase): + TIMESTAMPS = [0, 10, 100, 1000, 10000, 100000, 1000000, + 1234567890, 1262304000, 1275785153,] + def test_timegm(self): + for secs in self.TIMESTAMPS: + tuple = time.gmtime(secs) + self.assertEqual(secs, calendar.timegm(tuple)) def test_main(): support.run_unittest( OutputTestCase, CalendarTestCase, MondayTestCase, - SundayTestCase + SundayTestCase, + TimegmTestCase, )