Merged revisions 76529 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76529 | antoine.pitrou | 2009-11-25 23:59:36 +0100 (mer., 25 nov. 2009) | 4 lines

  Issue #5788: `datetime.timedelta` objects get a new `total_seconds()` method returning
  the total number of seconds in the duration.  Patch by Brian Quinlan.
........
This commit is contained in:
Antoine Pitrou 2009-11-25 23:02:32 +00:00
parent 7d7aede558
commit be6859d877
4 changed files with 35 additions and 1 deletions

View File

@ -267,12 +267,24 @@ comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
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:: timedelta.total_seconds()
Return the total number of seconds contained in the duration. Equivalent to
``td.microseconds / 1000000 + td.seconds + td.days * 24 * 3600``.
.. versionadded:: 3.2
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

View File

@ -261,6 +261,13 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase):
self.assertEqual(td.seconds, seconds)
self.assertEqual(td.microseconds, us)
def test_total_seconds(self):
td = timedelta(days=365)
self.assertEqual(td.total_seconds(), 31536000.0)
for total_seconds in [123456.789012, -123456.789012, 0.123456, 0, 1e6]:
td = timedelta(seconds=total_seconds)
self.assertEqual(td.total_seconds(), total_seconds)
def test_carries(self):
t1 = timedelta(days=100,
weeks=-7,

View File

@ -140,6 +140,10 @@ C-API
Library
-------
- Issue #5788: `datetime.timedelta` objects get a new `total_seconds()`
method returning the total number of seconds in the duration. Patch by
Brian Quinlan.
- Issue #7133: SSL objects now support the new buffer API.
- Issue #1488943: difflib.Differ() doesn't always add hints for tab characters

View File

@ -2062,6 +2062,14 @@ delta_getstate(PyDateTime_Delta *self)
GET_TD_MICROSECONDS(self));
}
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)
{
@ -2084,6 +2092,9 @@ static PyMemberDef delta_members[] = {
};
static PyMethodDef delta_methods[] = {
{"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)")},