# Change Log
All notable changes to this project will be documented in this file.

## [2.0.0] - 2026-10-26
The project is now called **dateblock** (it used to be datetools).

### Added
- Read a schedule in another timezone: `--timezone` (`-z`) on the command
  line, or a timezone-aware `datetime` in Python.
- Run a command once the time is reached, ie:
  `dateblock -n /15 -- ./backup.sh`; dateblock exits with the command's
  own exit code.
- Range steps such as `1-10/3` (1, 4, 7 and 10).
- Error messages that say what is wrong, ie: `minute '99': 99 is outside of
  0-59`.
- The `libdateblock` shared library, with headers and a pkg-config file.
- Packages for Fedora, RHEL 9 and 10, Debian 13, Arch Linux and Homebrew,
  and Python wheels for Linux, macOS and Windows (Python 3.9 to 3.14).
- A complete man page.

### Changed
- `--isc` reads an entry exactly as crontab(5) does: the day of the month
  OR the day of the week may match, and `*/5` days are the 1st, 6th, 11th...
- Fields left out only reset to their lowest value when they are smaller
  than the smallest field given: `/5 * 3,4` is every 5th second during
  hours 3 and 4.
- Unclear entries such as `5-`, `5,,6` and `*,5` are now errors instead of
  quietly matching something else.
- Much faster: long lists such as `0-59 0-59 0-23` cost the same as single
  values.
- Blocking wakes up exactly on the second, and Ctrl-C interrupts it.
- Boost is no longer needed.
- Python: Python 3 only (`from dateblock import dateblock` still works).
  A bad schedule raises `SyntaxError`, one that never happens raises
  `ValueError`, and an unsupported `ref` raises `TypeError`.

### Removed
- The datemath tool; `date -d` (ie: `date -d '+3 days -2 hours'`) does the
  same job.

### Fixed
- A schedule that never happens (ie: February 31st) is reported as an
  error, while lists that only partly exist (ie: the 30th and 31st of
  February and March) find the dates that do.
- Rare dates such as February 29th on a given weekday are found.
- Times around daylight saving changes and month ends are correct (ie: the
  31st no longer rolls into the next month).
- A month-only schedule (ie: `-m 3`) starts on the 1st.
- Date formats such as %I, %j, %P, %U, %x, %X and %h print correctly.
- Very large drift values no longer loop forever.
- Python: errors no longer end the Python interpreter.

## [1.0.3] - 2018-05-31
### Changed
- Fixed the padding of dates (padding with a zero).
- PyPI support.

## [1.0.0] - 2017-04-21
### Added
- The drift can be given inline in the cron with a plus (+): `0 /5 +4` is
  the same as `0 /5 * * * * 4` (every 5 minutes, plus 4 seconds), and
  several drifts work too (`0 /5 +15,45`).
- Regular crontab entries (Internet Systems Consortium format) with
  `--isc`.

## [0.8.1] - 2015-08-17
### Changed
- Fixed the month missing from the printed time.

## [0.8.0] - 2013-10-26
### Added
- Initial release on GitHub.
