Index: Doc/library/datetime.rst =================================================================== --- Doc/library/datetime.rst (révision 67068) +++ Doc/library/datetime.rst (copie de travail) @@ -285,6 +285,13 @@ >>> abs(three_years - ten_years) == 2 * three_years + year True +Instance methods: + +.. method:: timedelta.toseconds() + + Returns the total number of seconds this timedelta object represents. + This is equivalent to (timedelta.days * 3600 * 24) + timedelta.seconds + + timedelta.microseconds / 1000000.0. .. _datetime-date: Index: Lib/test/test_datetime.py =================================================================== --- Lib/test/test_datetime.py (révision 67068) +++ Lib/test/test_datetime.py (copie de travail) @@ -474,6 +474,10 @@ self.assertEqual(str(t3), str(t4)) self.assertEqual(t4.as_hours(), -1) + def test_toseconds(self): + self.assertEqual(timedelta(days=3, seconds=2, microseconds=1).toseconds(), 259202.000001) + self.assertEqual(timedelta(days=999999999, microseconds=1).toseconds(), 86399999913600.0) + ############################################################################# # date tests Index: Modules/datetimemodule.c =================================================================== --- Modules/datetimemodule.c (révision 67068) +++ Modules/datetimemodule.c (copie de travail) @@ -2094,6 +2094,39 @@ return Py_BuildValue("ON", Py_TYPE(self), delta_getstate(self)); } +static PyObject * +delta_toseconds(PyDateTime_Delta* self) +{ + PyObject *t1, *t2, *t3; + PyObject *secs; + PyObject *retval; + + secs = PyFloat_FromDouble(GET_TD_SECONDS(self)); + + t1 = PyFloat_FromDouble(GET_TD_DAYS(self)); + t2 = PyFloat_FromDouble(3600*24); + t3 = PyNumber_Multiply(t1, t2); + Py_DECREF(t1); + Py_DECREF(t2); + + retval = PyNumber_Add(secs, t3); + Py_DECREF(secs); + Py_DECREF(t3); + secs = retval; + + t1 = PyFloat_FromDouble(GET_TD_MICROSECONDS(self)); + t2 = PyFloat_FromDouble(1e6); + t3 = PyNumber_Divide(t1, t2); + Py_DECREF(t1); + Py_DECREF(t2); + + retval = PyNumber_Add(secs, t3); + Py_DECREF(secs); + Py_DECREF(t3); + + return retval; +} + #define OFFSET(field) offsetof(PyDateTime_Delta, field) static PyMemberDef delta_members[] = { @@ -2113,6 +2146,8 @@ {"__reduce__", (PyCFunction)delta_reduce, METH_NOARGS, PyDoc_STR("__reduce__() -> (cls, state)")}, + {"toseconds", (PyCFunction)delta_toseconds, METH_NOARGS, + PyDoc_STR("Total number of seconds represented by this timedelta object.")}, {NULL, NULL}, };