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:
parent
0d9f61a543
commit
bcfaf8007d
|
@ -269,12 +269,22 @@ comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
|
||||||
efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
|
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)``.
|
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``.
|
||||||
|
|
||||||
|
|
||||||
Example usage:
|
Example usage:
|
||||||
|
|
||||||
>>> from datetime import timedelta
|
>>> from datetime import timedelta
|
||||||
>>> year = timedelta(days=365)
|
>>> year = timedelta(days=365)
|
||||||
>>> another_year = timedelta(weeks=40, days=84, hours=23,
|
>>> another_year = timedelta(weeks=40, days=84, hours=23,
|
||||||
... minutes=50, seconds=600) # adds up to 365 days
|
... minutes=50, seconds=600) # adds up to 365 days
|
||||||
|
>>> year.total_seconds()
|
||||||
|
31536000.0
|
||||||
>>> year == another_year
|
>>> year == another_year
|
||||||
True
|
True
|
||||||
>>> ten_years = 10 * year
|
>>> ten_years = 10 * year
|
||||||
|
|
|
@ -266,6 +266,13 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase):
|
||||||
self.assertEqual(td.seconds, seconds)
|
self.assertEqual(td.seconds, seconds)
|
||||||
self.assertEqual(td.microseconds, us)
|
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):
|
def test_carries(self):
|
||||||
t1 = timedelta(days=100,
|
t1 = timedelta(days=100,
|
||||||
weeks=-7,
|
weeks=-7,
|
||||||
|
|
|
@ -483,6 +483,10 @@ Core and Builtins
|
||||||
Library
|
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 #6615: logging: Used weakrefs in internal handler list.
|
- Issue #6615: logging: Used weakrefs in internal handler list.
|
||||||
|
|
||||||
- Issue #1488943: difflib.Differ() doesn't always add hints for tab characters
|
- Issue #1488943: difflib.Differ() doesn't always add hints for tab characters
|
||||||
|
|
|
@ -2088,6 +2088,14 @@ delta_getstate(PyDateTime_Delta *self)
|
||||||
GET_TD_MICROSECONDS(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 *
|
static PyObject *
|
||||||
delta_reduce(PyDateTime_Delta* self)
|
delta_reduce(PyDateTime_Delta* self)
|
||||||
{
|
{
|
||||||
|
@ -2110,6 +2118,9 @@ static PyMemberDef delta_members[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyMethodDef delta_methods[] = {
|
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,
|
{"__reduce__", (PyCFunction)delta_reduce, METH_NOARGS,
|
||||||
PyDoc_STR("__reduce__() -> (cls, state)")},
|
PyDoc_STR("__reduce__() -> (cls, state)")},
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue