NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2700 most downloaded on PyPI
Cron string parser and scheduler for Python
Last release 4 days ago
30 Sep 2026
Release timing varies
gaps range from 8 days to 1.2 years
Some releases are documented
notes for 11 of 22 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
22 releases · first in 2021
One column per quarter.
fix from_list and from_string methods
fix from_list and from_string methods
from_string() and from_list() methods now replace the schedule after all five fields are validated. A rejected import keeps the previous schedule intact
Thanks to @bensynapse
Fix importing results in an error ModuleNotFoundError: No module named 'cron_converter.sub_modules' , when using cron-converter in certain environment
Fix importing results in an error ModuleNotFoundError: No module named 'cron_converter.sub_modules', when using cron-converter in certain environments like AWS Glue.
Pin setuptools package discovery.
Makes Seeker.next() exclusive by default. This is a breaking change and the reason for the bump to 2.0.0 .
Makes Seeker.next() exclusive by default. This is a breaking change and the reason
for the bump to 2.0.0.
The release also fixes a reset() bug, removes a long-standing fragility in the test
harness, and extends the CI matrix to Python 3.13 and 3.14.
next() is now exclusivenext() now always returns a datetime strictly after the start date, or after the value
returned by the previous call. Previously, when the start date fell exactly on a scheduled
minute, the first call returned that same minute.
| Expression | Start date | 1.3.1 | 2.0.0 |
|---|---|---|---|
*/15 * * * * |
2021-01-01 10:00 | 2021-01-01 10:00 | 2021-01-01 10:15 |
0 12 * * * |
2021-01-01 12:00 | 2021-01-01 12:00 | 2021-01-02 12:00 |
0 0 1 * * |
2021-01-01 00:00 | 2021-01-01 00:00 | 2021-02-01 00:00 |
The shift is one full cron period, so a daily schedule moves by a day and a monthly
schedule by a month. Only the first call on a new or freshly reset() schedule is
affected, and only when the start date lands exactly on a matching minute — a start date
carrying seconds or microseconds was never "exactly on" a minute and is unchanged.
A new inclusive parameter restores the 1.x result on the first call:
schedule = Cron('0 12 * * *').schedule(datetime(2021, 1, 1, 12, 0))
schedule.next(inclusive=True) # 2021-01-01T12:00:00 - as in 1.x
schedule.next() # 2021-01-02T12:00:00inclusive affects only the first call on a pristine Seeker; later calls are always
exclusive. It is not reachable through the iterator protocol (next(schedule),
islice(schedule, n)), which is always exclusive.
reset() no longer rewinds into the pastWhen a schedule was built from a start date carrying seconds or microseconds, reset()
dropped the roll-forward applied at construction. For */15 * * * * starting at
10:00:30, 1.3.1 gave:
next() -> 10:15:00
reset(); next() -> 10:00:00 # earlier than the start date, and inconsistent
reset() now restores exactly the state the Seeker had on construction, so the second
call returns 10:15:00 as well.
Fix types and import sort errors.
Fix types and import sort errors.
Thanks to @Jeremiah-England
Add Iterator for Seeker. Thanks to @fabiob
Add Iterator for Seeker.
Thanks to @fabiob
Fix cron equality (issue 23)
Fix cron equality (issue 23)
Fix datetime object validation for weekday parameter
Fix datetime object validation for weekday parameter
Fix schedule specifying datetime milleseconds.
New Feature Add datetime object validation Thanks to @lucianosrp
Make weekday comparison independent of locale #6 . Thanks to @stan-janssen
Nothing published for this version
Add support for multiple unit ranges with step
Add support for multiple unit ranges with step
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →