summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorent Xicluna <florent.xicluna@gmail.com>2011-10-31 23:06:58 (GMT)
committerFlorent Xicluna <florent.xicluna@gmail.com>2011-10-31 23:06:58 (GMT)
commit2738a64621685ef852b8230d7d2b806af6052496 (patch)
treeb6615f9067dc154cd33958e9611d52755fd96ee8
parente695eec24addd2a39c9af7456b8218c0810d742c (diff)
downloadcpython-2738a64621685ef852b8230d7d2b806af6052496.zip
cpython-2738a64621685ef852b8230d7d2b806af6052496.tar.gz
cpython-2738a64621685ef852b8230d7d2b806af6052496.tar.bz2
Fix regression due to changeset 2096158376e5 (issue #13305).
-rw-r--r--Lib/xmlrpc/client.py27
1 files changed, 21 insertions, 6 deletions
diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py
index b1f5a94..ff931e7 100644
--- a/Lib/xmlrpc/client.py
+++ b/Lib/xmlrpc/client.py
@@ -250,18 +250,33 @@ boolean = Boolean = bool
# Wrapper for XML-RPC DateTime values. This converts a time value to
# the format used by XML-RPC.
# <p>
-# The value can be given as a string in the format
-# "yyyymmddThh:mm:ss", as a 9-item time tuple (as returned by
+# The value can be given as a datetime object, as a string in the
+# format "yyyymmddThh:mm:ss", as a 9-item time tuple (as returned by
# time.localtime()), or an integer value (as returned by time.time()).
# The wrapper uses time.localtime() to convert an integer to a time
# tuple.
#
-# @param value The time, given as an ISO 8601 string, a time
-# tuple, or a integer time value.
+# @param value The time, given as a datetime object, an ISO 8601 string,
+# a time tuple, or an integer time value.
+
+
+# Issue #13305: different format codes across platforms
+_day0 = datetime(1, 1, 1)
+if _day0.strftime('%Y') == '0001': # Mac OS X
+ def _iso8601_format(value):
+ return value.strftime("%Y%m%dT%H:%M:%S")
+elif _day0.strftime('%4Y') == '0001': # Linux
+ def _iso8601_format(value):
+ return value.strftime("%4Y%m%dT%H:%M:%S")
+else:
+ def _iso8601_format(value):
+ return value.strftime("%Y%m%dT%H:%M:%S").zfill(17)
+del _day0
+
def _strftime(value):
if isinstance(value, datetime):
- return value.strftime("%Y%m%dT%H:%M:%S")
+ return _iso8601_format(value)
if not isinstance(value, (tuple, time.struct_time)):
if value == 0:
@@ -288,7 +303,7 @@ class DateTime:
o = other.value
elif isinstance(other, datetime):
s = self.value
- o = other.strftime("%Y%m%dT%H:%M:%S")
+ o = _iso8601_format(other)
elif isinstance(other, str):
s = self.value
o = other