Issue #28752: Restored the __reduce__() methods of datetime objects.
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 36374aa..7540109 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -932,7 +932,7 @@
 
     # Pickle support.
 
-    def _getstate(self, protocol=3):
+    def _getstate(self):
         yhi, ylo = divmod(self._year, 256)
         return bytes([yhi, ylo, self._month, self._day]),
 
@@ -940,8 +940,8 @@
         yhi, ylo, self._month, self._day = string
         self._year = yhi * 256 + ylo
 
-    def __reduce_ex__(self, protocol):
-        return (self.__class__, self._getstate(protocol))
+    def __reduce__(self):
+        return (self.__class__, self._getstate())
 
 _date_class = date  # so functions w/ args named "date" can get at the class
 
@@ -1348,6 +1348,9 @@
     def __reduce_ex__(self, protocol):
         return (time, self._getstate(protocol))
 
+    def __reduce__(self):
+        return self.__reduce_ex__(2)
+
 _time_class = time  # so functions w/ args named "time" can get at the class
 
 time.min = time(0, 0, 0)
@@ -1923,6 +1926,9 @@
     def __reduce_ex__(self, protocol):
         return (self.__class__, self._getstate(protocol))
 
+    def __reduce__(self):
+        return self.__reduce_ex__(2)
+
 
 datetime.min = datetime(1, 1, 1)
 datetime.max = datetime(9999, 12, 31, 23, 59, 59, 999999)