[Python-checkins] python/dist/src/Modules datetimemodule.c, 1.76, 1.77

montanaro at users.sourceforge.net montanaro at users.sourceforge.net
Thu Jan 13 05:12:36 CET 2005


Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27707/Modules

Modified Files:
	datetimemodule.c 
Log Message:
Add strptime() constructor to datetime class.  Thanks to Josh Spoerri for
the changes.


Index: datetimemodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/datetimemodule.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- datetimemodule.c	19 Dec 2004 20:13:24 -0000	1.76
+++ datetimemodule.c	13 Jan 2005 04:12:31 -0000	1.77
@@ -3798,6 +3798,46 @@
 	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. */
 static PyObject *
 datetime_combine(PyObject *cls, PyObject *args, PyObject *kw)
@@ -4419,6 +4459,11 @@
 	 PyDoc_STR("timestamp -> UTC datetime from a POSIX timestamp "
 	 	   "(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,
 	 METH_VARARGS | METH_KEYWORDS | METH_CLASS,
 	 PyDoc_STR("date, time -> datetime with same date and time fields")},



More information about the Python-checkins mailing list