Index: Doc/library/datetime.rst =================================================================== --- Doc/library/datetime.rst (revision 71746) +++ Doc/library/datetime.rst (working copy) @@ -263,12 +263,22 @@ efficient pickling, and in Boolean contexts, a :class:`timedelta` object is considered to be true if and only if it isn't equal to ``timedelta(0)``. +Instance methods: + + +.. method:: datetime.total_seconds() + + Return the total number of seconds contained in the duration. Equivalent to + ``td.microseconds / 1000000 + td.seconds + td.days * 24 * 3600``. + Example usage: >>> from datetime import timedelta >>> year = timedelta(days=365) >>> another_year = timedelta(weeks=40, days=84, hours=23, ... minutes=50, seconds=600) # adds up to 365 days + >>> year.total_seconds() + 31536000.0 >>> year == another_year True >>> ten_years = 10 * year Index: Lib/test/test_datetime.py =================================================================== --- Lib/test/test_datetime.py (revision 71746) +++ Lib/test/test_datetime.py (working copy) @@ -261,6 +261,11 @@ self.assertEqual(td.seconds, seconds) self.assertEqual(td.microseconds, us) + def test_total_seconds(self): + for total_seconds in [123456.789012, -123456.789012, 0.123456, 0]: + td = timedelta(seconds=total_seconds) + self.assertEqual(td.total_seconds(), total_seconds) + def test_carries(self): t1 = timedelta(days=100, weeks=-7, Index: Modules/datetimemodule.c =================================================================== --- Modules/datetimemodule.c (revision 71746) +++ Modules/datetimemodule.c (working copy) @@ -2063,6 +2063,14 @@ } static PyObject * +delta_total_seconds(PyObject *self) +{ + return PyFloat_FromDouble(GET_TD_MICROSECONDS(self) / 1000000.0 + + GET_TD_SECONDS(self) + + GET_TD_DAYS(self) * 24.0 * 3600.0); +} + +static PyObject * delta_reduce(PyDateTime_Delta* self) { return Py_BuildValue("ON", Py_TYPE(self), delta_getstate(self)); @@ -2084,7 +2092,10 @@ }; static PyMethodDef delta_methods[] = { - {"__reduce__", (PyCFunction)delta_reduce, METH_NOARGS, + {"total_seconds", (PyCFunction)delta_total_seconds, METH_NOARGS, + PyDoc_STR("Total seconds in the duration.")}, + + {"__reduce__", (PyCFunction)delta_reduce, METH_NOARGS, PyDoc_STR("__reduce__() -> (cls, state)")}, {NULL, NULL},