0.91 2026-06-09
  - Add Time::Str::TimeZone for resolving IANA Time Zone Database
    names (and the special name 'local') to cached Time::TZif
    objects via the exported timezone function. Lookups dispatch
    through an overridable provider and the cache is cleared with
    the reset method.
  - Track the leap second table expiration in Time::LeapSecond.
    parse_leapseconds_tzdb and parse_leapseconds_iers now return
    (\@days, \@corrections, $expires), reading the TZDB #expires line
    and the IERS #@ line (converted from NTP to POSIX) and croaking
    if absent; the value is exposed as $Time::LeapSecond::EXPIRES.
  - Accept POSIX quoted timezone designations (e.g. <+05>) in
    valid_posix_timezone in Time::Str::Util.
  - Add find_local_timezone to Time::Str::Util for resolving the
    system's local timezone (via TZ or /etc/localtime) into a
    Time::TZif or Time::TZif::POSIX object.

0.90 2026-06-07
  - str2time now accepts a 'timezone' argument: an object with an
    offset_for_local method used to resolve a parsed local time that
    carries no UTC designator or numeric offset. A string offset
    takes precedence; the object is DST-aware. Time::TZif and
    Time::TZif::POSIX provide suitable objects.
  - str2time now accepts a 'timezone_map' argument: a hash mapping
    timezone abbreviations (e.g. CET, EST) to objects with an
    offset_for_local method, used to resolve an abbreviation parsed
    from the string. A map entry takes precedence over a bare
    'timezone' object; an abbreviation absent from the map croaks.
  - time2str now accepts a 'timezone' argument: an object with an
    offset_for_utc method used to derive the offset for the given
    instant (DST-aware), as an alternative to a fixed 'offset'. The
    two are mutually exclusive.

0.89 2026-06-02
  - str2time now folds a leap second (23:59:60) onto 23:59:59
    instead of rolling it over to the next day's 00:00:00, and
    validates that it lands on a leap-second slot: 23:59:60 UTC on
    June 30 or December 31, from 1972 onward. The check is table-
    free. str2date accepts any HH:MM:60, since a leap second's
    local time of day depends on the UTC offset.
  - Add Time::LeapSecond module: leap second history with TAI/UTC
    conversions (posix_tai_offset, posix_to_tai, tai_to_posix) and
    rdn_leap_correction for testing whether a calendar day carries a
    leap second. The table can be refreshed from a system file via
    load_leapseconds_tzdb (IANA TZDB) or load_leapseconds_iers
    (IERS/NIST).

0.88 2026-05-29
  - Declare Time::TZif and Time::TZif::POSIX API stable; remove
    experimental notice from documentation.
  - Time::TZif now resolves times beyond the last stored transition
    using the POSIX TZ string footer in v2/v3 TZif files. All four
    lookup methods (offset_for_utc, offset_for_local,
    type_info_for_utc, type_info_for_local) handle future dates
    correctly.
  - Add valid_tzdb_timezone and valid_posix_timezone structural
    validators to Time::Str::Util.
  - Rename 'filename' parameter to 'path' in Time::TZif.
  - Add modified_time accessor to Time::TZif, capturing st_mtime
    at parse time for stale-object detection.
  - Add optional 'name' parameter to Time::TZif and Time::TZif::POSIX
    constructors, validated via valid_tzdb_timezone. Includes name()
    accessor and has_name() predicate.
  - Add immutable with_name, with_gap_policy, and with_overlap_policy
    methods to Time::TZif and Time::TZif::POSIX. Return shallow copies
    sharing parsed data; return the same object when unchanged.
  - Cache POSIX TZ transition windows for years 1990–2039 in
    Time::TZif::POSIX.
  - Document POSIX::mktime behaviour for glibc (Linux) and BSD libc
    (macOS) in the Time::TZif COMPATIBILITY section.

0.87 2026-05-26
  - Add Time::TZif::POSIX module for algorithmic POSIX TZ string
    parsing (IEEE Std 1003.1 / RFC 8536 §3.3.1). Same API as
    Time::TZif. Supports Mm.w.d, Jn, and n rule forms, quoted
    designations, extended rule times, and cross-year transitions.
  - Add gmtime_modern to Time::Str::Time for converting Unix epoch
    to broken-down UTC time. Returns nine values like Perl's gmtime
    but with modern conventions (month 1-12, full year). PP and XS
    implementations with range validation.
  - Add nth_dow_in_month to Time::Str::Calendar for computing the
    nth occurrence of a weekday in a month. Supports forward (1–4)
    and backward (-1 to -4) ordinals with ISO weekday numbering.
  - Add find_tzdb_directory to Time::Str::Util for locating the
    system timezone database directory.

0.86 2026-05-23
  - Add Time::TZif module for parsing TZif binary timezone files
    (RFC 8536) with configurable local time resolution policies for
    gaps and overlaps. Supports v1 (32-bit) and v2/v3 (64-bit)
    timestamps.
  - Add Time::Str::Time module with UTC epoch conversion and time
    validation (timegm_posix, timegm_modern, valid_hms, valid_hms60).
    PP and XS implementations. Year range 1-9999, strict validation.
  - Add Time::Str::Util module with binary search utilities
    (lower_bound, upper_bound) following C++ STL conventions.
    PP and XS implementations.

0.85 2026-05-21
  - Add native C parsers (Ragel) for ASN.1 GeneralizedTime, ISO 8601,
    ISO 9075 and RFC 9557.

0.80 2026-05-19
  - Add native C parsers (Ragel) for RFC 4287 and W3CDTF formats.

0.71 2026-05-19
  - Fix @CARP_NOT support in C/XS backend by routing parse errors
    through per-package _croak wrappers.

0.70 2026-05-18
  - Use Carp::croak for parse errors in C/XS backend to support
    @CARP_NOT in wrapper modules.
  - Add example scripts for DateTime, Time::Moment, and Time::HiRes
    integration (eg/datetime.pl, eg/time-moment.pl, eg/time-hires.pl).
  - Add NON_CONSTRUCTOR_KEYS constant for safe forwarding of
    str2date results to DateTime or Time::Moment constructors.
  - Document INTEROPERABILITY with DateTime, Time::HiRes, and
    Time::Moment including NON_CONSTRUCTOR_KEYS usage.
  - Optimize str2date in list context by pushing key-value pairs
    directly onto the Perl stack, avoiding intermediate HV allocation
  - Add benchmark scripts for str2time and time2str comparing
    performance across formats and against other modules
    (bench/, repository only).

0.60 2026-05-14
  - Fix str2time integer overflow on perls built with 32-bit IV.
  - Add native C parsers (Ragel) for RFC 3339, RFC 2822, and ECMAScript
    formats. The XS backend tries native parsers first and falls back to
    the regexp path for formats without a C parser.

0.50 2026-05-12 Milestone
  - Implement str2time and str2date in C/XS. All public functions
    (time2str, str2time, str2date) now have optional XS implementations
    using C99. The XS backend uses the same precompiled regexps from
    Time::Str::Regexp as the Pure-Perl implementation. Performance of
    str2time is approximately 10x faster than Pure-Perl.

0.10 2026-05-12
  - Fix build failure caused by missing tstr_calendar.c in C source list.
  - Consolidate Pure-Perl Token and Calendar implementations into
    Time::Str::PP.
  - Declare v5.10.1 minimum in all source files.

0.09 2026-05-12
  - Add Time::Str::Token module for converting captured date/time tokens
    to semantic values (parse_day, parse_month, parse_day_name,
    parse_meridiem, parse_tz_offset). Includes XS implementation.
  - Add Time::Str::Calendar module for Gregorian calendar validation and
    computation (leap_year, month_days, valid_ymd, ymd_to_rdn, rdn_to_ymd,
    ymd_to_dow, rdn_to_dow, resolve_century). Includes XS implementation.
  - Validate ordinal day suffixes against day number (previously matched
    but not verified). Mismatched suffixes are now rejected.
  - Capture ordinal suffixes inside the day field in DateTime_Rx.
  - Add documentation for Time::Str::Regexp: named captures, format
    groupings, and a worked example combining Regexp, Token, and Calendar.

0.08 2026-05-07
  - Split RFC2822 into canonical (strict) and RFC2822FWS (permissive) variants.
    The canonical form uses single-space separators and accepts a single
    non-nested comment. RFC2822FWS preserves the original behavior with
    folding white space and nested comments.
  - Add Time::Str::Regexp module providing individually exportable
    precompiled regexes for all supported date/time formats.
  - Validate day name against parsed date (previously accepted without
    verification). Inadvertently omitted from the 0.07 changelog.
  - Use config slicing for MakeMaker::Awesome header and WriteMakefile_arg
    options. Update [@Starter] to v6.0.2 for correct [PrereqsFile] ordering.
    (PR by @Grinnz)
  - Use canonical format names in parse error messages.

0.07 2026-05-06
  - Added optional XS acceleration of time2str (requires C99 compiler).
    Falls back to pure-Perl when no compiler is available.
  - Refactored internals: parsing regexps moved to Time::Str::Regexp,
    pure-Perl implementation moved to Time::Str::PP.

0.06 2026-05-04
  - Expanded RATIONALE with comparison to Date::Parse,
    Date::Parse::Modern, and Time::ParseDate covering numeric date
    ambiguity, two-digit year handling, and timezone abbreviation
    resolution.
  - Added RFC 3501 (IMAP) format support.
  - Added ECMAScript format support.
  - Added UnixStamp format support.

0.05 2026-05-02
  - Added RFC 9557 (IXDTF) format support.
  - Added RATIONALE and LIMITATIONS to POD

0.04 2026-04-29
  - Added ISO 8601 format support.

0.03 2026-04-28
  - Clarified and expanded the Generic format documentation.
  - Added RFC 5280 (PKIX/x509) format support.
  - Added RFC 5545 (iCalendar) format support.

0.02 2026-04-27
  - Added missing Test::Number::Delta to test prerequisites.

0.01 2026-04-26
  - Initial CPAN release.
