Patch #1646728: datetime.fromtimestamp fails with negative
fractional times. With unittest. (backport from rev. 54167 by Guido)
This commit is contained in:
parent
1a74b4325c
commit
02d7cffb8f
|
@ -1425,6 +1425,15 @@ class TestDateTime(TestDate):
|
||||||
self.assertRaises(ValueError, self.theclass.utcfromtimestamp,
|
self.assertRaises(ValueError, self.theclass.utcfromtimestamp,
|
||||||
insane)
|
insane)
|
||||||
|
|
||||||
|
def test_negative_float_fromtimestamp(self):
|
||||||
|
# The result is tz-dependent; at least test that this doesn't
|
||||||
|
# fail (like it did before bug 1646728 was fixed).
|
||||||
|
self.theclass.fromtimestamp(-1.05)
|
||||||
|
|
||||||
|
def test_negative_float_utcfromtimestamp(self):
|
||||||
|
d = self.theclass.utcfromtimestamp(-1.05)
|
||||||
|
self.assertEquals(d, self.theclass(1969, 12, 31, 23, 59, 58, 950000))
|
||||||
|
|
||||||
def test_utcnow(self):
|
def test_utcnow(self):
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,9 @@ Core and builtins
|
||||||
Extension Modules
|
Extension Modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Patch #1646728: datetime.fromtimestamp fails with negative
|
||||||
|
fractional times. With unittest.
|
||||||
|
|
||||||
- Patch #1494140: Add documentation for the new struct.Struct object.
|
- Patch #1494140: Add documentation for the new struct.Struct object.
|
||||||
|
|
||||||
- Patch #1657276: Make NETLINK_DNRTMSG conditional.
|
- Patch #1657276: Make NETLINK_DNRTMSG conditional.
|
||||||
|
|
|
@ -3686,6 +3686,12 @@ 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 (us < 0) {
|
||||||
|
/* Truncation towards zero is not what we wanted
|
||||||
|
for negative numbers (Python's mod semantics) */
|
||||||
|
timet -= 1;
|
||||||
|
us += 1000000;
|
||||||
|
}
|
||||||
/* If timestamp is less than one microsecond smaller than a
|
/* If timestamp is less than one microsecond smaller than a
|
||||||
* full second, round up. Otherwise, ValueErrors are raised
|
* full second, round up. Otherwise, ValueErrors are raised
|
||||||
* for some floats. */
|
* for some floats. */
|
||||||
|
|
Loading…
Reference in New Issue