diff --git a/Lib/calendar.py b/Lib/calendar.py
index 3f9b7ba..365ca26 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -5,10 +5,7 @@
 Sunday as the last (the European convention). Use setfirstweekday() to
 set the first day of the week (0=Monday, 6=Sunday)."""
 
-# Revision 2: uses functions from built-in time module
-
-# Import functions and variables from time module
-from time import localtime, mktime, strftime
+import datetime
 
 __all__ = ["error","setfirstweekday","firstweekday","isleap",
            "leapdays","weekday","monthrange","monthcalendar",
@@ -35,7 +32,7 @@
         self.format = format
 
     def __getitem__(self, i):
-        data = [strftime(self.format, (2001, j, 1, 12, 0, 0, 1, 1, 0))
+        data = [datetime.date(2001, j, 1).strftime(self.format)
                      for j in range(1, 13)]
         data.insert(0, "")
         return data[i]
@@ -49,7 +46,7 @@
 
     def __getitem__(self, i):
         # January 1, 2001, was a Monday.
-        data = [strftime(self.format, (2001, 1, j+1, 12, 0, 0, j, j+1, 0))
+        data = [datetime.date(2001, 1, j+1).strftime(self.format)
                      for j in range(7)]
         return data[i]
 
@@ -89,14 +86,12 @@
        Assume y1 <= y2."""
     y1 -= 1
     y2 -= 1
-    return (y2/4 - y1/4) - (y2/100 - y1/100) + (y2/400 - y1/400)
+    return (y2//4 - y1//4) - (y2//100 - y1//100) + (y2//400 - y1//400)
 
 def weekday(year, month, day):
     """Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12),
        day (1-31)."""
-    secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0))
-    tuple = localtime(secs)
-    return tuple[6]
+    return datetime.date(year, month, day).weekday()
 
 def monthrange(year, month):
     """Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for
@@ -213,17 +208,12 @@
     return s[:-l] + '\n'
 
 EPOCH = 1970
+_EPOCH_ORD = datetime.date(EPOCH, 1, 1).toordinal()
+
 def timegm(tuple):
     """Unrelated but handy function to calculate Unix timestamp from GMT."""
     year, month, day, hour, minute, second = tuple[:6]
-    assert year >= EPOCH
-    assert 1 <= month <= 12
-    days = 365*(year-EPOCH) + leapdays(EPOCH, year)
-    for i in range(1, month):
-        days = days + mdays[i]
-    if month > 2 and isleap(year):
-        days = days + 1
-    days = days + day - 1
+    days = datetime.date(year, month, day).toordinal() - _EPOCH_ORD
     hours = days*24 + hour
     minutes = hours*60 + minute
     seconds = minutes*60 + second
