diff options
author | Florent Xicluna <florent.xicluna@gmail.com> | 2011-10-31 23:06:58 (GMT) |
---|---|---|
committer | Florent Xicluna <florent.xicluna@gmail.com> | 2011-10-31 23:06:58 (GMT) |
commit | 2738a64621685ef852b8230d7d2b806af6052496 (patch) | |
tree | b6615f9067dc154cd33958e9611d52755fd96ee8 | |
parent | e695eec24addd2a39c9af7456b8218c0810d742c (diff) | |
download | cpython-2738a64621685ef852b8230d7d2b806af6052496.zip cpython-2738a64621685ef852b8230d7d2b806af6052496.tar.gz cpython-2738a64621685ef852b8230d7d2b806af6052496.tar.bz2 |
Fix regression due to changeset 2096158376e5 (issue #13305).
-rw-r--r-- | Lib/xmlrpc/client.py | 27 |
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 |