mirror of
https://github.com/python/cpython.git
synced 2025-09-12 11:46:52 +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)
|
got = self.theclass.utcfromtimestamp(ts)
|
||||||
self.verify_field_equality(expected, got)
|
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):
|
def test_insane_fromtimestamp(self):
|
||||||
# It's possible that some platform maps time_t to double,
|
# It's possible that some platform maps time_t to double,
|
||||||
# and that this test will fail there. This test should
|
# 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;
|
return NULL;
|
||||||
fraction = timestamp - (double)timet;
|
fraction = timestamp - (double)timet;
|
||||||
us = (int)round_to_long(fraction * 1e6);
|
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);
|
return datetime_from_timet_and_us(cls, f, timet, us, tzinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue