summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2018-06-20 18:56:00 +0200
committerMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2018-06-20 18:56:00 +0200
commitaf9e41a3293f4cf8bb7ec8b3ec9298fac735d967 (patch)
treef823c3c20a6ce6a9ee5e181f82d447b581d34714
parentf059c4c04c1aeb66be5b3ab9a309b9fd82bb3925 (diff)
downloadcroniter-af9e41a3293f4cf8bb7ec8b3ec9298fac735d967.tar.gz
(fix#107): microsecond threshold
-rw-r--r--docs/CHANGES.rst4
-rw-r--r--src/croniter/croniter.py3
-rwxr-xr-xsrc/croniter/tests/test_croniter.py20
3 files changed, 25 insertions, 2 deletions
diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst
index 186f123..5e47eb7 100644
--- a/docs/CHANGES.rst
+++ b/docs/CHANGES.rst
@@ -3,8 +3,8 @@ Changelog
0.3.24 (unreleased)
-------------------
-
-- Nothing changed yet.
+unreleased
+- fix `#107 <https://github.com/taichino/croniter/issues/107>`_: microsecond threshold
0.3.23 (2018-05-23)
diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py
index 6c8331b..3398227 100644
--- a/src/croniter/croniter.py
+++ b/src/croniter/croniter.py
@@ -80,6 +80,9 @@ class croniter(object):
self.tzinfo = None
if isinstance(start_time, datetime.datetime):
self.tzinfo = start_time.tzinfo
+ # milliseconds/microseconds rounds
+ if start_time.microsecond:
+ start_time = start_time + relativedelta(seconds=1)
start_time = self._datetime_to_timestamp(start_time)
self.start_time = start_time
diff --git a/src/croniter/tests/test_croniter.py b/src/croniter/tests/test_croniter.py
index b7bf57a..2d23525 100755
--- a/src/croniter/tests/test_croniter.py
+++ b/src/croniter/tests/test_croniter.py
@@ -812,6 +812,26 @@ class CroniterTest(base.TestCase):
self.assertTrue(next_b > next_a)
+ def test_milliseconds(self):
+ """
+ https://github.com/taichino/croniter/issues/107
+ """
+ #
+ dt = datetime(2018, 1, 2, 10, 0, 0, 500)
+ c = croniter("0 10 * * * ", start_time=dt)
+ ts = "{0}".format(datetime.utcfromtimestamp(c.get_prev()))
+ self.assertEqual(ts, '2018-01-02 10:00:00')
+ #
+ dt = datetime(2018, 1, 2, 10, 0, 1, 0)
+ c = croniter("0 10 * * * ", start_time=dt)
+ ts = "{0}".format(datetime.utcfromtimestamp(c.get_prev()))
+ self.assertEqual(ts, '2018-01-02 10:00:00')
+ #
+ dt = datetime(2018, 1, 2, 9, 59, 59, 999999)
+ c = croniter("0 10 * * * ", start_time=dt)
+ ts = "{0}".format(datetime.utcfromtimestamp(c.get_prev()))
+ self.assertEqual(ts, '2018-01-01 10:00:00')
+
if __name__ == '__main__':
unittest.main()