Releases: markusmobius/rust-dateutil
Release list
v2.9.1
Rust-Dateutil v2.9.1
Native Rust shared date compatibility for HtmlDate and DateParser, matching the Python-qualified Go-Dateutil v2.9.1 implementation. The upstream baseline remains python-dateutil 2.9.0.post0; CPython compatibility is separately pinned to 3.14.6.
Changes
- Add
compat::datetime::from_isoformatwith CPython calendar/week dates, midnight rollover, microsecond offsets, and rejection behavior. - Add
compat::datetime::timestampwith local naive gap/fold resolution and exact Python-compatible floating-point rounding. - Add explicit
parser::LocalTimezone/parse_with_local_timezoneandParsedLocalDatefold state, preserving the existingParsedDateAPI. - Expose the existing Python Unicode decimal helper. No new runtime dependencies, unsafe code, or worker threads.
- Update README installation and API documentation; retain source provenance, independent fixtures, and the original CPython license.
Verification
17,256 independent Python-derived comparisons. Passed Rust 1.98.1 Linux debug/release and native Windows/GNU release suites, README doctests, strict all-target Clippy, formatting, package verification, and byte-identical pinned-Python regeneration.
GitHub source release only; not published to crates.io. This is the documented shared subset, not every Dateutil or CPython API. Complete HtmlDate integration remains a separate consumer gate. Existing v2.9.0 tags and fixtures are unchanged.
rust-dateutil = { version = "=2.9.1", git = "https://github.com/markusmobius/rust-dateutil", tag = "v2.9.1" }v2.9.0
Compatibility
Rust-Dateutil 2.9.0 implements the python-dateutil 2.9.0.post0 subset needed by HtmlDate and DateParser, matching Go-Dateutil v2.9.0. It is not a full dateutil port. The Python .post0 suffix and the precise supported scope are documented in README and UPSTREAM.md.
Included Functionality
- Default English, non-fuzzy parsing: Python Unicode tokenization, source-ordered field resolution, explicit defaults and parser year, calendar validation, decimal clock fractions, timezone awareness and offsets.
- Relative calendar/time arithmetic: month-end clamping, leap years, mixed units, fractional smaller units, microsecond rounding, range checks, and wall-time DST behavior.
- Native Rust with no Go/Python runtime, unsafe Rust, or internal worker threads. Callers own concurrency.
Tests Included
- 3,273 lexer comparisons against Python token streams.
- 3,273 parser comparisons against Python dates/rejections, including exact calendar/clock fields, microseconds, awareness, and offsets.
- 146 relative-arithmetic comparisons, including leap years, month ends, fractional/mixed units, overflows, and DST gaps/folds.
Tests, saved independent Python fixtures, the pinned reference generator, and the upstream license ship with the source. Ordinary cargo test --locked needs no Python or sibling checkout. The optional generator pins CPython 3.14.6, python-dateutil 2.9.0.post0, source hashes, Unicode16 and reference timezone data; regeneration was byte-identical.
All three suites and the README doctest passed on Linux and native Windows/GNU with Rust1.98.1. Strict Clippy and formatting passed. The same tests passed from the actual packaged crate. Hosted CI covers Linux and Windows/MSVC; that is distinct from local Windows/GNU qualification.
Installation
[dependencies]
rust-dateutil = { version = "=2.9.0", git = "https://github.com/markusmobius/rust-dateutil", tag = "v2.9.0" }Requires Rust1.98.1 or later. GitHub source release only; not published to crates.io. See README for unsupported APIs and timezone/error representation boundaries. Rust-DateParser integration and the v1.4.5-to-v1.4.6 performance gate are separate and are not claimed complete by this release.