summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Belopolsky <alexander.belopolsky@gmail.com>2011-01-08 00:13:34 (GMT)
committerAlexander Belopolsky <alexander.belopolsky@gmail.com>2011-01-08 00:13:34 (GMT)
commitb8bb4664fc8cb833f0fd50c9dac4f6c3be032784 (patch)
tree1b02d0fbb69e4849a2f4e0c48d7f33fa088b0bd0
parent9253214fd9fe22b8b2b4ca5bb28952df8cab3e8c (diff)
downloadcpython-b8bb4664fc8cb833f0fd50c9dac4f6c3be032784.zip
cpython-b8bb4664fc8cb833f0fd50c9dac4f6c3be032784.tar.gz
cpython-b8bb4664fc8cb833f0fd50c9dac4f6c3be032784.tar.bz2
Issue #1777412: extended year range of strftime down to 1000.
-rw-r--r--Lib/datetime.py8
-rw-r--r--Lib/test/datetimetester.py6
-rw-r--r--Modules/_datetimemodule.c12
-rw-r--r--Modules/timemodule.c4
4 files changed, 15 insertions, 15 deletions
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 29ffe24..47e54ec 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -173,9 +173,9 @@ def _format_time(hh, mm, ss, us):
# Correctly substitute for %z and %Z escapes in strftime formats.
def _wrap_strftime(object, format, timetuple):
year = timetuple[0]
- if year < 1900:
- raise ValueError("year=%d is before 1900; the datetime strftime() "
- "methods require year >= 1900" % year)
+ if year < 1000:
+ raise ValueError("year=%d is before 1000; the datetime strftime() "
+ "methods require year >= 1000" % year)
# Don't call utcoffset() or tzname() unless actually needed.
freplace = None # the string to use for %f
zreplace = None # the string to use for %z
@@ -1189,7 +1189,7 @@ class time:
"""Format using strftime(). The date part of the timestamp passed
to underlying strftime should not be used.
"""
- # The year must be >= 1900 else Python's strftime implementation
+ # The year must be >= 1000 else Python's strftime implementation
# can raise a bogus exception.
timetuple = (1900, 1, 1,
self._hour, self._minute, self._second,
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index b5822cc..4b5c890 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -1284,10 +1284,10 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
self.assertTrue(self.theclass.max)
def test_strftime_out_of_range(self):
- # For nasty technical reasons, we can't handle years before 1900.
+ # For nasty technical reasons, we can't handle years before 1000.
cls = self.theclass
- self.assertEqual(cls(1900, 1, 1).strftime("%Y"), "1900")
- for y in 1, 49, 51, 99, 100, 1000, 1899:
+ self.assertEqual(cls(1000, 1, 1).strftime("%Y"), "1000")
+ for y in 1, 49, 51, 99, 100, 999:
self.assertRaises(ValueError, cls(y, 1, 1).strftime, "%Y")
def test_replace(self):
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index 16964d8..6195940 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -1166,10 +1166,10 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
if (!pin)
return NULL;
- /* Give up if the year is before 1900.
+ /* Give up if the year is before 1000.
* Python strftime() plays games with the year, and different
* games depending on whether envar PYTHON2K is set. This makes
- * years before 1900 a nightmare, even if the platform strftime
+ * years before 1000 a nightmare, even if the platform strftime
* supports them (and not all do).
* We could get a lot farther here by avoiding Python's strftime
* wrapper and calling the C strftime() directly, but that isn't
@@ -1182,10 +1182,10 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
assert(PyLong_Check(pyyear));
year = PyLong_AsLong(pyyear);
Py_DECREF(pyyear);
- if (year < 1900) {
+ if (year < 1000) {
PyErr_Format(PyExc_ValueError, "year=%ld is before "
- "1900; the datetime strftime() "
- "methods require year >= 1900",
+ "1000; the datetime strftime() "
+ "methods require year >= 1000",
year);
return NULL;
}
@@ -3663,7 +3663,7 @@ time_strftime(PyDateTime_Time *self, PyObject *args, PyObject *kw)
/* Python's strftime does insane things with the year part of the
* timetuple. The year is forced to (the otherwise nonsensical)
- * 1900 to worm around that.
+ * 1900 to work around that.
*/
tuple = Py_BuildValue("iiiiiiiii",
1900, 1, 1, /* year, month, day */
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 94265c6..5732f15 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -471,9 +471,9 @@ time_strftime(PyObject *self, PyObject *args)
return NULL;
/* XXX: Reportedly, some systems have issues formating dates prior to year
- * 1900. These systems should be identified and this check should be
+ * 1000. These systems should be identified and this check should be
* moved to appropriate system specific section below. */
- if (buf.tm_year < 0) {
+ if (buf.tm_year < -900) {
PyErr_Format(PyExc_ValueError, "year=%d is before 1900; "
"the strftime() method requires year >= 1900",
buf.tm_year + 1900);