From 6bfb321707e4d532f72f265f87e942354d340562 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 3 Mar 2021 14:35:23 -0600 Subject: [PATCH 1/2] datetime: fix _fromtimestamp for small-range floats A typical timestamp is 1614803568. A CircuitPython float's granularity at this magnitude is several minutes! By avoiding the use of modf when t is an integer, the `datetime.now()` classmethod is usable, i.e., it reutnrs a time that increases from second to second instead of mostly being stuck and occasionally jumping forward. --- adafruit_datetime.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/adafruit_datetime.py b/adafruit_datetime.py index 735ac3b..e57546e 100755 --- a/adafruit_datetime.py +++ b/adafruit_datetime.py @@ -1283,7 +1283,10 @@ def _fromtimestamp(cls, t, utc, tz): """Construct a datetime from a POSIX timestamp (like time.time()). A timezone info object may be passed in as well. """ - frac, t = _math.modf(t) + if isinstance(t, float): + frac, t = _math.modf(t) + else: + frac, t = 0, t us = round(frac * 1e6) if us >= 1000000: t += 1 From f487c265b6106e2a58a85c6ef6f2b32f4292907c Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 3 Mar 2021 17:10:02 -0600 Subject: [PATCH 2/2] fix pylint diagnostic --- adafruit_datetime.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_datetime.py b/adafruit_datetime.py index e57546e..b430f40 100755 --- a/adafruit_datetime.py +++ b/adafruit_datetime.py @@ -1286,7 +1286,7 @@ def _fromtimestamp(cls, t, utc, tz): if isinstance(t, float): frac, t = _math.modf(t) else: - frac, t = 0, t + frac = 0 us = round(frac * 1e6) if us >= 1000000: t += 1