mirror of
https://github.com/python/cpython.git
synced 2025-09-14 04:37:29 +00:00
Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
possibly "rounding up" to the next whole second.
This commit is contained in:
parent
6a907d8b8e
commit
6d78a582ec
2 changed files with 13 additions and 0 deletions
|
@ -1400,6 +1400,12 @@ class TestDateTime(TestDate):
|
|||
got = self.theclass.utcfromtimestamp(ts)
|
||||
self.verify_field_equality(expected, got)
|
||||
|
||||
def test_microsecond_rounding(self):
|
||||
# Test whether fromtimestamp "rounds up" floats that are less
|
||||
# than one microsecond smaller than an integer.
|
||||
self.assertEquals(self.theclass.fromtimestamp(0.9999999),
|
||||
self.theclass.fromtimestamp(1))
|
||||
|
||||
def test_insane_fromtimestamp(self):
|
||||
# It's possible that some platform maps time_t to double,
|
||||
# and that this test will fail there. This test should
|
||||
|
|
|
@ -3683,6 +3683,13 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, double timestamp,
|
|||
return NULL;
|
||||
fraction = timestamp - (double)timet;
|
||||
us = (int)round_to_long(fraction * 1e6);
|
||||
/* If timestamp is less than one microsecond smaller than a
|
||||
* full second, round up. Otherwise, ValueErrors are raised
|
||||
* for some floats. */
|
||||
if (us == 1000000) {
|
||||
timet += 1;
|
||||
us = 0;
|
||||
}
|
||||
return datetime_from_timet_and_us(cls, f, timet, us, tzinfo);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue