mirror of https://github.com/python/cpython
Add strptime() constructor to datetime class. Thanks to Josh Spoerri for
the changes.
This commit is contained in:
parent
2f8c6589f5
commit
0af3ade6aa
|
@ -624,6 +624,15 @@ Other constructors, all class methods:
|
||||||
ignored.
|
ignored.
|
||||||
\end{methoddesc}
|
\end{methoddesc}
|
||||||
|
|
||||||
|
\begin{methoddesc}{strptime}{date_string, format}
|
||||||
|
Return a \class{datetime} corresponding to \var{date_string}, parsed
|
||||||
|
according to \var{format}. This is equivalent to
|
||||||
|
\code{datetime(*(time.strptime(date_string,
|
||||||
|
format)[0:6]))}. \exception{ValueError} is raised if the date_string and
|
||||||
|
format can't be parsed by \function{time.strptime()} or if it returns a
|
||||||
|
value which isn't a time tuple.
|
||||||
|
\end{methoddesc}
|
||||||
|
|
||||||
Class attributes:
|
Class attributes:
|
||||||
|
|
||||||
\begin{memberdesc}{min}
|
\begin{memberdesc}{min}
|
||||||
|
|
|
@ -1421,6 +1421,15 @@ class TestDateTime(TestDate):
|
||||||
# Else try again a few times.
|
# Else try again a few times.
|
||||||
self.failUnless(abs(from_timestamp - from_now) <= tolerance)
|
self.failUnless(abs(from_timestamp - from_now) <= tolerance)
|
||||||
|
|
||||||
|
def test_strptime(self):
|
||||||
|
import time
|
||||||
|
|
||||||
|
string = '2004-12-01 13:02:47'
|
||||||
|
format = '%Y-%m-%d %H:%M:%S'
|
||||||
|
expected = self.theclass(*(time.strptime(string, format)[0:6]))
|
||||||
|
got = self.theclass.strptime(string, format)
|
||||||
|
self.assertEqual(expected, got)
|
||||||
|
|
||||||
def test_more_timetuple(self):
|
def test_more_timetuple(self):
|
||||||
# This tests fields beyond those tested by the TestDate.test_timetuple.
|
# This tests fields beyond those tested by the TestDate.test_timetuple.
|
||||||
t = self.theclass(2004, 12, 31, 6, 22, 33)
|
t = self.theclass(2004, 12, 31, 6, 22, 33)
|
||||||
|
|
|
@ -548,6 +548,7 @@ Dirk Soede
|
||||||
Paul Sokolovsky
|
Paul Sokolovsky
|
||||||
Clay Spence
|
Clay Spence
|
||||||
Per Spilling
|
Per Spilling
|
||||||
|
Joshua Spoerri
|
||||||
Noah Spurrier
|
Noah Spurrier
|
||||||
Oliver Steele
|
Oliver Steele
|
||||||
Greg Stein
|
Greg Stein
|
||||||
|
|
|
@ -31,6 +31,8 @@ Extension Modules
|
||||||
This allows islice() to work more readily with slices:
|
This allows islice() to work more readily with slices:
|
||||||
islice(s.start, s.stop, s.step)
|
islice(s.start, s.stop, s.step)
|
||||||
|
|
||||||
|
- datetime.datetime() now has a strptime class method which can be used to
|
||||||
|
create datetime object using a string and format.
|
||||||
|
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
|
@ -3798,6 +3798,46 @@ datetime_utcfromtimestamp(PyObject *cls, PyObject *args)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return new datetime from time.strptime(). */
|
||||||
|
static PyObject *
|
||||||
|
datetime_strptime(PyObject *cls, PyObject *args)
|
||||||
|
{
|
||||||
|
PyObject *result = NULL, *obj, *module;
|
||||||
|
const char *string, *format;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "ss:strptime", &string, &format))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if ((module = PyImport_ImportModule("time")) == NULL)
|
||||||
|
return NULL;
|
||||||
|
obj = PyObject_CallMethod(module, "strptime", "ss", string, format);
|
||||||
|
Py_DECREF(module);
|
||||||
|
|
||||||
|
if (obj != NULL) {
|
||||||
|
int i, good_timetuple = 1;
|
||||||
|
long int ia[6];
|
||||||
|
if (PySequence_Check(obj) && PySequence_Size(obj) >= 6)
|
||||||
|
for (i=0; i < 6; i++) {
|
||||||
|
PyObject *p = PySequence_GetItem(obj, i);
|
||||||
|
if (PyInt_Check(p))
|
||||||
|
ia[i] = PyInt_AsLong(p);
|
||||||
|
else
|
||||||
|
good_timetuple = 0;
|
||||||
|
Py_DECREF(p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
good_timetuple = 0;
|
||||||
|
if (good_timetuple)
|
||||||
|
result = PyObject_CallFunction(cls, "iiiiii",
|
||||||
|
ia[0], ia[1], ia[2], ia[3], ia[4], ia[5]);
|
||||||
|
else
|
||||||
|
PyErr_SetString(PyExc_ValueError,
|
||||||
|
"unexpected value from time.strptime");
|
||||||
|
Py_DECREF(obj);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return new datetime from date/datetime and time arguments. */
|
/* Return new datetime from date/datetime and time arguments. */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
datetime_combine(PyObject *cls, PyObject *args, PyObject *kw)
|
datetime_combine(PyObject *cls, PyObject *args, PyObject *kw)
|
||||||
|
@ -4419,6 +4459,11 @@ static PyMethodDef datetime_methods[] = {
|
||||||
PyDoc_STR("timestamp -> UTC datetime from a POSIX timestamp "
|
PyDoc_STR("timestamp -> UTC datetime from a POSIX timestamp "
|
||||||
"(like time.time()).")},
|
"(like time.time()).")},
|
||||||
|
|
||||||
|
{"strptime", (PyCFunction)datetime_strptime,
|
||||||
|
METH_VARARGS | METH_CLASS,
|
||||||
|
PyDoc_STR("string, format -> new datetime parsed from a string "
|
||||||
|
"(like time.strptime()).")},
|
||||||
|
|
||||||
{"combine", (PyCFunction)datetime_combine,
|
{"combine", (PyCFunction)datetime_combine,
|
||||||
METH_VARARGS | METH_KEYWORDS | METH_CLASS,
|
METH_VARARGS | METH_KEYWORDS | METH_CLASS,
|
||||||
PyDoc_STR("date, time -> datetime with same date and time fields")},
|
PyDoc_STR("date, time -> datetime with same date and time fields")},
|
||||||
|
|
Loading…
Reference in New Issue