Skip to content

Releases: markusmobius/rust-dateutil

Release list

v2.9.1

Choose a tag to compare

@markusmobius markusmobius released this 13 Sep 22:17

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_isoformat with CPython calendar/week dates, midnight rollover, microsecond offsets, and rejection behavior.
  • Add compat::datetime::timestamp with local naive gap/fold resolution and exact Python-compatible floating-point rounding.
  • Add explicit parser::LocalTimezone / parse_with_local_timezone and ParsedLocalDate fold state, preserving the existing ParsedDate API.
  • 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

Choose a tag to compare

@markusmobius markusmobius released this 13 Sep 18:04

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.