summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/timemodule.c63
1 files changed, 53 insertions, 10 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 6c938c2..7b411ae 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -33,6 +33,8 @@ PERFORMANCE OF THIS SOFTWARE.
#include "Python.h"
+#include <ctype.h>
+
#ifdef HAVE_SELECT
#include "mymath.h"
#endif
@@ -221,6 +223,22 @@ time_sleep(self, args)
}
static PyObject *
+tmtotuple(p)
+ struct tm *p;
+{
+ return Py_BuildValue("(iiiiiiiii)",
+ p->tm_year + 1900,
+ p->tm_mon + 1, /* Want January == 1 */
+ p->tm_mday,
+ p->tm_hour,
+ p->tm_min,
+ p->tm_sec,
+ (p->tm_wday + 6) % 7, /* Want Monday == 0 */
+ p->tm_yday + 1, /* Want January, 1 == 1 */
+ p->tm_isdst);
+}
+
+static PyObject *
time_convert(when, function)
time_t when;
struct tm * (*function) Py_PROTO((const time_t *));
@@ -235,16 +253,7 @@ time_convert(when, function)
#endif
return PyErr_SetFromErrno(PyExc_IOError);
}
- return Py_BuildValue("(iiiiiiiii)",
- p->tm_year + 1900,
- p->tm_mon + 1, /* Want January == 1 */
- p->tm_mday,
- p->tm_hour,
- p->tm_min,
- p->tm_sec,
- (p->tm_wday + 6) % 7, /* Want Monday == 0 */
- p->tm_yday + 1, /* Want January, 1 == 1 */
- p->tm_isdst);
+ return tmtotuple(p);
}
static PyObject *
@@ -345,6 +354,37 @@ time_strftime(self, args)
}
#endif /* HAVE_STRFTIME */
+#ifdef HAVE_STRPTIME
+static PyObject *
+time_strptime(self, args)
+ PyObject *self;
+ PyObject *args;
+{
+ struct tm tm;
+ char *fmt = "%a %b %d %H:%M:%S %Y";
+ char *buf;
+ char *s;
+
+ if (!PyArg_ParseTuple(args, "s|s", &buf, &fmt)) {
+ PyErr_SetString(PyExc_ValueError, "invalid argument");
+ return NULL;
+ }
+ s = strptime(buf, fmt, &tm);
+ if (s == NULL) {
+ PyErr_SetString(PyExc_ValueError, "format mismatch");
+ return NULL;
+ }
+ while (*s && isspace(*s))
+ s++;
+ if (*s) {
+ PyErr_Format(PyExc_ValueError,
+ "unconverted data remains: '%.400s'", s);
+ return NULL;
+ }
+ return tmtotuple(&tm);
+}
+#endif /* HAVE_STRPTIME */
+
static PyObject *
time_asctime(self, args)
PyObject *self;
@@ -419,6 +459,9 @@ static PyMethodDef time_methods[] = {
#ifdef HAVE_STRFTIME
{"strftime", time_strftime, 1},
#endif
+#ifdef HAVE_STRPTIME
+ {"strptime", time_strptime, 1},
+#endif
{NULL, NULL} /* sentinel */
};