Module changelog

CHANGELOG

0.2.34 (TBD)

TODO

Enhancements:

0.2.33 (2026-07-18)

This release permits the use of a global time zone database in alloc-only environments. It also contains a massive internal refactor that introduces a new jiff-core crate for better code sharing.

Enhancements:

0.2.32 (2026-07-08)

This release updates Jiff's bundled copy of the IANA Time Zone Database to 2026c. See the 2026c release announcement for more details.

0.2.31 (2026-06-29)

This release fixes a minor bug in tests that prevents the crate from running through standard build processes in Linux distributions downstream.

0.2.30 (2026-06-29)

This release fixes a safety soundness bug in Jiff's lower level printing APIs. There is also a nice performance improvement to civil::Date::weekday, which also improves downstread routines like civil::Date::nth_weekday and datetime<-->timestamp conversions in some cases.

Enhancements:

Bug fixes:

0.2.29 (2026-06-20)

This release adds support for defmt, which is a highly efficient logging framework that targets resource-constrained devices, like microcontrollers.

Enhancements:

Bug fixes:

0.2.28 (2026-05-28)

This is a small release with a fix for test failures on 32-bit targets in no-alloc environments.

Bug fixes:

0.2.27 (2026-05-26)

This is a small release with a bug fix for build errors on Windows for very old versions of Rust.

Bug fixes:

0.2.26 (2026-05-25)

This release has a couple enhancements.

Firstly, Jiff now uses windows-link for calling FFI routines on Windows instead of windows-sys. Using windows-link means less churn and fewer duplicates in the dependency graph.

Secondly, a new jiff-sqlx 0.2.0 release has been put out to support sqlx 0.9.0.

Enhancements:

Bug fixes:

0.2.25 (2026-05-24)

This release updates Jiff's bundled copy of the IANA Time Zone Database to 2026b. See the 2026b release announcement for more details.

0.2.24 (2026-04-23)

This release primarily adds a new memory_usage routine for reporting heap allocation sizes for the TimeZone and Zoned types. This release also acknowledges and updates the timeline expectations for a Jiff 1.0 release in README.md.

Enhancements:

Bug fixes:

0.2.23 (2026-03-03)

This release updates Jiff's bundled copy of the IANA Time Zone Database to 2026a. See the 2026a release announcement for more details.

0.2.22 (2026-02-28)

This release includes a bug fix where fallible conversions from signed durations to unsigned durations could panic in some cases.

Bug fixes:

0.2.21 (2026-02-22)

This release contains a performance improvement and a bug fix for civil::Date::new where it could panic on some inputs.

Bug fixes:

Performance:

0.2.20 (2026-02-11)

This release contains a major internal refactor that moves off of using ranged integers internally. There are also some small bug fixes and added support for finding the system time zone on emscripten targets.

Enhancements:

Bug fixes:

0.2.19 (2026-02-05)

This is a small release with a performance optimization (with respect to doing heavily contended arithmetic on Zoned values) and a bug fix for a panic that can occur when using %2s in strftime.

Enhancements:

Bug fixes:

0.2.18 (2026-01-05)

This release ships a sizeable refactor to the RFC 2822, RFC 9110, RC 3339, RFC 9557, ISO 8601 and friendly format printers. Specifically, they are now all monomorphic internally (instead of being generic over jiff::fmt::Write) and write to uninitialized buffers. This improves runtime performance (sometimes dramatically so), and to a more modest degree, decreases binary size and improves compile times.

This release also includes a bug fix where DateTime::MIN.to_zoned(..) could panic.

Enhancements:

0.2.17 (2025-12-24)

This release contains binary size improvements to Jiff, more succinct error messages and some new minor APIs.

While Jiff 1.0 is overdue, I've been doing a lot of experimenting with improving Jiff's binary size and compile times. In particular, I want to spend time doing this before Jiff 1.0 so that we don't box ourselves into a corner. (For example, some binary size improvements may require minor API breaking changes.)

In this release, Jiff has switched to structured error handling internally in an effort to provide error predicates and also hopefully improve binary sizes and compile times. Overall this didn't have as big of an impact on binary sizes or compile times as I was hoping. I did take this opportunity to make Jiff's error messages a bit more succinct. In many cases, this involved de-duplicating some aspects of error messages and omitting user provided input in the messages. If you feel like there is a significant decrease in error message quality that isn't easily amended by callers providing additional context themselves, please open an issue.

This release also updates Jiff's bundled copy of the IANA Time Zone Database to 2025c. See the 2025c release announcement for more details.

Enhancements:

0.2.16 (2025-11-07)

This release contains a number of enhancements and bug fixes that have accrued over the last few months. Most are small polishes. A couple of the bug fixes apply to panics that could occur when parsing invalid TZ strings or invalid strptime format strings.

Also, parsing into a Span should now be much faster (for both the ISO 8601 and "friendly" duration formats).

Enhancements:

Bug fixes:

Performance:

0.2.15 (2025-06-13)

This release fixes a bug where error values were being constructed during parsing even in the success case. This was a regression introduced in 0.2.14 as a result of trying to improve compilation times. Thankfully, fixing this regression doesn't seem to meaningfully impact the amount of IR generated by compiling Jiff.

Bug fixes:

0.2.14 (2025-05-20)

This release includes a smattering of bug fixes, and hopefully a small improvement to the time it takes to compile Jiff. Also, in this release, when TZ is set to a non-empty but invalid value, Jiff will always fall back to Etc/Unknown when using TimeZone::system(). This differs from previous behavior where Jiff would, in this case, attempt to read the system's default time zone. This change brings Jiff into consistency with existing Unix tooling like date, and is also arguably a better failure mode. That is, when TZ is set but invalid, we shouldn't silently fall back to the default system time zone, but instead do something that indicates something has potentially gone wrong.

Enhancements:

Bug fixes:

0.2.13 (2025-05-05)

This release fixes a bug in a corner case where TimeZone::following could sometimes omit the last time zone transition. This could only happen in time zones that once had daylight saving time, but ended it. This did not have an impact on other Jiff APIs that handle daylight saving time.

Bug fixes:

0.2.12 (2025-05-03)

This release fixes a couple bugs in Jiff's parser. In particular, a regression was introduced in jiff 0.2.11 where its RFC 2822 parser could panic on some inputs. Previous releases of Jiff are unaffected.

Bug fixes:

0.2.11 (2025-05-01)

This release includes new APIs for customizing Jiff's strtime behavior along with a few minor bug fixes. Jiff's strtime formatting API has also been optimized. It's about twice as fast as it was.

This release also coincides with the publication of jiff-icu 0.2.0-beta.2, which has support for icu 2.0.0-beta.2.

Enhancements:

Bug fixes:

Performance:

0.2.10 (2025-04-21)

This release includes a bug fix for parsing Tuesday when using %A via Jiff's strptime APIs. Specifically, it would recognize Tueday instead of Tuesday.

Bug fixes:

0.2.9 (2025-04-19)

This release includes a bug fix that, in debug mode, could result in datetime types having different hashes for the same value. This could cause problems, for example, if you are using datetimes as keys in a hash map. This problem didn't exist when Jiff was compiled in release mode.

This release also improves the panic message shown when the js feature isn't enabled and the current time is requested on wasm32-unknown-unknown targets.

Enhancements:

Bug fixes:

0.2.8 (2025-04-13)

This release fixes a bug where the constructors on SignedDuration for floating point durations could panic (in debug mode) or produce incorrect results (in release mode). This bug only impacts users of the try_from_secs_{f32,f64} and from_secs_{f32,f64} methods on SignedDuration.

Enhancements:

Bug fixes:

0.2.7 (2025-04-13)

This release includes a bug fix that changes how an empty but set TZ environment variable is interpreted (as indistinguishable from TZ=UTC). This also includes a new enabled by default create feature, perf-inline, which allows toggling Jiff's use of inline(always). This may help improve compile times or decrease binary size.

Enhancements:

Bug fixes:

0.2.6 (2025-04-07)

This release includes a few bug fixes and support for discovering the IANA Time Zone Database automatically on Illumos.

Enhancements:

Bug fixes:

0.2.5 (2025-03-22)

This release updates Jiff's bundled copy of the IANA Time Zone Database to 2025b. See the 2025b release announcement for more details.

Enhancements:

0.2.4 (2025-03-10)

This is another small release that fixes a problem where Jiff could break builds if they relied on inference for integer comparisons. Specifically, Jiff uses internal trait impls to make comparing its internal ranged integers more convenient. But Rust the language has no concept of "internal" trait impls, and thus this can impact type inference. If code was written in a way that relies on a singular trait impl that is available, then adding Jiff to the project can cause it to break.

This isn't arguably Jiff's fault per se, but since these trait impls were just about internal convenience and not essential to Jiff's design, we adopt a pragmatic approach and just remove them.

Bug fixes:

0.2.3 (2025-03-07)

This is a small release that fixes a bug in the handling of POSIX time zones in some cases. Specifically, the implementation of Date::yesterday was wrong when the date was the first of the month. This was a regression introduced in 0.2.2 and was not present in older releases. More test coverage has been added.

Bug fixes:

0.2.2 (2025-03-06)

This release of Jiff includes a new opt-in proc macro for embedding a TimeZone into your binary. Just enable Jiff's static feature, and this will print the current time in the America/New_York time zone:

use jiff::{
    tz::{self, TimeZone},
    Timestamp,
};

fn main() {
    static TZ: TimeZone = tz::get!("America/New_York");
    let zdt = Timestamp::now().to_zoned(TZ.clone());
    println!("{zdt}");
}

This enables TimeZone to be meaningfully used in core-only environments, even when dynamic memory allocation isn't available.

This release also features a number of performance improvements for time zone lookups. In some cases, the improvement is significant (by an order of magnitude).

Additionally, the IANA Time Zone Database embedded into jiff-tzdb now uses "rearguard" semantics. This means that the boolean flag indicating whether daylight saving time is active or not (only accessible via TimeZone::to_offset_info) will respect the actual definition of daylight saving time. (This is relevant, for example, for time zones like Europe/Dublin, where their summer time is legally known as their standard time, but is in effect daylight saving time.)

Enhancements:

Bug fixes:

0.2.1 (2025-02-16)

This release includes a massive number of optimizations that significantly improves performance in some cases. If you had a workload whose performance with Jiff was underwhelming, please give it a try. I welcome questions via Discussions on GitHub.

This release also provides a new API, Timestamp::constant, for constructing Timestamp values in a const context.

Enhancements:

0.2.0 (2025-02-10)

This is a new semver incompatible release of Jiff. It contains several breaking changes. I expect most users of Jiff to be able to upgrade without any changes. The fundamental API organization of Jiff has not changed.

Some of the highlights of this release include reducing footguns and better ecosystem integration.

For reducing footguns, APIs on Span will no longer implicitly assume that days are always 24 hours long. And Span no longer implements PartialEq or Eq (instead favoring span.fieldwise() to create a value that supports naive fieldwise comparison). Moreover, when using TimeZone::system() (perhaps via Zoned::now()), if the system time zone could not be detected, then a special Etc/Unknown time zone will be used instead. This avoids erroring, but also surfaces itself to make it clearer that something has (perhaps) gone wrong.

As for ecosystem integration, this release coincides with the publication of the jiff-icu, jiff-sqlx and jiff-diesel crates. jiff-icu integrates with the ICU4X project, and is now the recommended way to use Jiff to work with non-Gregorian calendars or to localize datetimes for end users. jiff-sqlx and jiff-diesel provide wrapper types that implement the necessary traits to make it ergonomic to store and retrieve Jiff values in a database using SQLx or Diesel, respectively.

Unless something unexpected happens, my plan is for the next breaking change release to be Jiff 1.0 in about 6 months. Once Jiff 1.0 is out, I plan to commit to it indefinitely.

BREAKING CHANGES:

This is an exhaustive list of breaking changes. Changes with the bolded RUNTIME prefix are changes that will not be caught by the Rust compiler. That is, they are changes in runtime behavior.

Enhancements:

0.1.29 (2025-02-02)

This release includes a few small enhancements and a bug fix. In particular, there is now Serde support for TimeZone and the ISOWeekDate API has been filled out a bit more.

Unless a serious issue is uncovered, my plan is that this will be the last release before jiff 0.2.

Enhancements:

Bug fixes:

0.1.28 (2025-01-27)

This is a small release that just removes the dev-dependency on serde_yml. It has been replaced with the deprecated serde_yaml. See this post about serde_yml shenanigans for why this was done. Note that this was only a dev-dependency and thus doesn't impact folks using Jiff.

Bug fixes:

0.1.27 (2025-01-25)

This is a small release with a bug fix for precision loss in some cases when doing arithmetic on Timestamp or Zoned.

Bug fixes:

0.1.26 (2025-01-23)

This is a small release with another deprecation and a new API for doing prefix parsing via strptime. There's also a bug fix for a corner case when dealing with daylight saving time gaps with the Zoned::with API.

Deprecations:

Enhancements:

Bug fixes:

0.1.25 (2025-01-21)

This release contains a number of deprecations in preparation for a jiff 0.2 release. The deprecations are meant to facilitate a smoother transition. The deprecations, when possible, come with new APIs that will permit users to write forward compatible code that will work in both jiff 0.1 and jiff 0.2.

This release also includes a handful of new conversion specifiers in Jiff's strftime and strptime APIs. This improves compatibility with the analogous implementation with GNU libc.

Deprecations:

Enhancements:

0.1.24 (2025-01-16)

This release updates Jiff's bundled copy of the IANA Time Zone Database to 2025a. See the 2025a release announcement for more details.

Enhancements:

0.1.23 (2025-01-13)

This release includes some bug fixes, particularly for compilation on aarch64-linux-android. There are also some minor enhancements, such as making Zoned::iso_week_date a convenience function for civil::Date::iso_week_date, in line with similar functions.

My current plan is to make a reasonably quick transition to jiff 0.2 with a few pending breaking changes. I will be making some jiff 0.1 releases with deprecations in order to make the transition as smooth as possible. If all goes well with jiff 0.2, then my plan is still to do a Jiff 1.0 release in the Summer of 2025.

Deprecations:

Enhancements:

Bug fixes:

0.1.22 (2025-01-12)

This release adds support for Android. This support means that Jiff will automatically read its special concatenated time zone database, and will read the persist.sys.timezone property to determine the system's current time zone.

See PLATFORM for more specific information about Android support.

Note that this release also removed all non-essential files (including tests and test data) for the artifact uploaded to crates.io. If you need or want these files, please open a new issue.

Enhancements:

0.1.21 (2025-01-04)

This release includes a new API for setting the unit designator label in a friendly formatted duration for zero-length durations.

Enhancements:

0.1.20 (2025-01-03)

This release includes a new type, Pieces, in the jiff::fmt::temporal sub-module. This exposes the individual components of a parsed Temporal ISO 8601 datetime string. It allows users of Jiff to circumvent the checks in the higher level parsing routines that prevent you from shooting yourself in the foot.

For example, parsing into a Zoned will return an error for raw RFC 3339 timestamps like 2025-01-03T22:03-05 because there is no time zone annotation. Without a time zone, Jiff cannot do time zone aware arithmetic and rounding. Instead, such a datetime can only be parsed into a Timestamp. This lower level Pieces API now permits users of Jiff to parse this string into its component parts and assemble it into a Zoned if they so choose.

Enhancements:

0.1.19 (2025-01-02)

This releases includes a UTF-8 related bug fix and a few enhancements.

Firstly, a Span's default Display implementation now writes uppercase unit designator labels. That means you'll get P1Y2M3DT4H5M6S instead of P1y2m3dT4h5m6s by default. You can restore previous behavior via jiff::fmt::temporal::SpanPrinter::lowercase. This change was made to improve interoperability.

Secondly, SignedDuration now supports rounding via SignedDuration::round. Note that it only supports rounding time units (hours or smaller). In order to round with calendar units, you'll still need to use a Span.

Enhancements:

Bug fixes:

0.1.18 (2024-12-31)

This release includes a few minor enhancements. Namely, the ability to iterate over time zone transitions (in the future or the past), and some improvements to failure modes when Timestamp and Span arithmetic fails.

Enhancements:

0.1.17 (2024-12-31)

This release enhances Jiff's support for no_std environments by making its alloc feature optional. When alloc is disabled, only fixed offset time zones are supported and error messages are significantly degraded. If you have core-only use cases for Jiff, I'd love to hear about them on the issue tracker.

Enhancements:

0.1.16 (2024-12-26)

This release includes a new jiff::fmt::friendly module for formatting and parsing durations in a more human readable format than what ISO 8601 specifies. ISO 8601 remains the "default" duration format in Jiff due to its widespread support. Here are some examples:

40d
40 days
1y1d
1yr 1d
3d4h59m
3 days, 4 hours, 59 minutes
3d 4h 59m
2h30m
2h 30m
1mo
1w
1 week
1w4d
1 wk 4 days
1m
0.0021s
0s
0d
0 days
3 mins 34s 123ms
3 mins 34.123 secs
3 mins 34,123s
1y1mo1d1h1m1.1s
1yr 1mo 1day 1hr 1min 1.1sec
1 year, 1 month, 1 day, 1 hour, 1 minute 1.1 seconds
1 year, 1 month, 1 day, 01:01:01.1

To quickly demonstrate this new feature, here's a simple CLI program using Clap:

use clap::Parser;
use jiff::{Span, Zoned};

#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
    duration: Span,
}

fn main() {
    let args = Args::parse();
    println!("adding duration to now: {}", &Zoned::now() + args.duration);
}

And running the program:

$ cargo run -q -- '1 year, 2 months, 5 hours'
adding duration to now: 2026-02-26T18:58:22-05:00[America/New_York]
$ cargo run -q -- 'P1Y2MT5H'  # ISO 8601 durations are supported too!
adding duration to now: 2026-02-26T19:00:57-05:00[America/New_York]

With Jiff, you should no longer need to pull in crates like humantime and humantime-serde to accomplish a similar task.

While this new format doesn't support any kind of internationalization, the prevalence of the humantime crate suggests there's a desire for something like this. The "friendly" format is meant to service all the same use cases as humantime does for durations, but in a way that doesn't let you shoot yourself in the foot.

The new "friendly" format is now the default for the Debug implementations of both Span and SignedDuration. It's also available via the "alternate" Display implementations for Span and SignedDuration as well. Moreover, the FromStr trait implementations for both Span and SignedDuration will parse both the ISO 8601 duration and this new "friendly" format. Finally, when serde integration is enabled, the Deserialize implementations for SignedDuration and Span also automatically parse either ISO 8601 or the friendly format. For serialization, ISO 8601 remains the default, but the jiff::fmt::serde module provides easy to use helpers to switch to the friendly format.

The jiff::fmt::friendly module documentation provides many more details, including a complete grammar for the format.

Enhancements:

Bug fixes:

0.1.15 (2024-11-30)

This release fixes a bug where Jiff would sometimes fail to parse TZif files (found, typically, in /usr/share/zoneinfo on Unix systems). This occurred when the TZif file contained a time zone transition outside the range of Jiff's Timestamp type (which is -9999-01-01 to 9999-12-31). The bug fix works by clamping the out-of-range transitions to Jiff's supported range.

This bug only seems to occur in some environments where their TZif files contain more extreme values than what is typically found.

Bug fixes:

0.1.14 (2024-11-01)

This release introduces new APIs to the RFC 2822 printer that explicitly print timestamps in a format strictly compatible with RFC 9110.

Enhancements:

0.1.13 (2024-09-07)

This release introduces a new jiff::tz::TimeZone::try_system API. It is like TimeZone::system, but returns an error instead of an automatic fall back to UTC when the system time zone could not be discovered.

This also includes an update to the bundled IANA Time Zone Database to the 2024b release in the jiff-tzdb crate. As a reminder, the bundled database is not used or included on Unix platforms by default. See PLATFORM for more details.

Enhancements:

0.1.12 (2024-08-31)

This release introduces some new minor APIs that support formatting Timestamp values as RFC 3339 strings with a specific offset.

Previously, using the standard formatting routines that Jiff provides, it was only possible to format a Timestamp using Zulu time. For example:

use jiff::Timestamp;

assert_eq!(
    Timestamp::UNIX_EPOCH.to_string(),
    "1970-01-01T00:00:00Z",
);

This is fine most use cases, but it can be useful on occasion to format a Timestamp with a specific offset. While this isn't as expressive as formatting a datetime with a time zone (e.g., with an IANA time zone identifier), it may be useful in contexts where you just want to "hint" at what a user's local time is. To that end, there is a new Timestamp::display_with_offset method that makes this possible:

use jiff::{tz, Timestamp};

assert_eq!(
    Timestamp::UNIX_EPOCH.display_with_offset(tz::offset(-5)).to_string(),
    "1969-12-31T19:00:00-05:00",
);

A corresponding API was added to jiff::fmt::temporal::DateTimePrinter for lower level use.

Moreover, this release also includes new convenience APIs on the Temporal and RFC 2822 printer types for returning strings. For example, previously, if you were using the RFC 2822 printer to format a Timestamp, you had to do this:

use jiff::{fmt::rfc2822::DateTimePrinter, Timestamp};

let mut buf = String::new();
DateTimePrinter::new().print_timestamp(&Timestamp::UNIX_EPOCH, &mut buf).unwrap();
assert_eq!(buf, "Thu, 1 Jan 1970 00:00:00 -0000");

But now you can just do this:

use jiff::{fmt::rfc2822::DateTimePrinter, Timestamp};

assert_eq!(
    DateTimePrinter::new().timestamp_to_string(&Timestamp::UNIX_EPOCH).unwrap(),
    "Thu, 1 Jan 1970 00:00:00 -0000",
);

Enhancements:

0.1.11 (2024-08-28)

This release includes a few small enhancements that have been requested over the last several weeks. The biggest enhancement is a new jiff::fmt::serde sub-module. It provides convenience routines similar to Chrono's chrono::serde sub-module for serializing and deserializing between a jiff::Timestamp and an integer number of seconds, milliseconds, microseconds or nanoseconds. For example:

use jiff::Timestamp;

#[derive(serde::Serialize, serde::Deserialize)]
struct Record {
    #[serde(with = "jiff::fmt::serde::timestamp::second::required")]
    timestamp: Timestamp,
}

let json = r#"{"timestamp":1517644800}"#;
let got: Record = serde_json::from_str(&json).unwrap();
assert_eq!(got.timestamp, Timestamp::from_second(1517644800).unwrap());
assert_eq!(serde_json::to_string(&got).unwrap(), json);

If you need to support optional timestamps via Option<Timestamp>, then use jiff::fmt::serde::timestamp::second::optional instead. Similarly, if you need to support milliseconds instead of seconds, then replace second with millisecond in the module path.

Enhancements:

0.1.10 (2024-08-23)

This release features a small bug fix where Jiff will detect an IANA time zone identifier in some cases where it wouldn't before. While Jiff would previously read the symlink metadata on /etc/localtime by default to discover the system configured time zone on Unix systems, it wouldn't do so when TZ=/etc/localtime. There's really no reason not to, so this release of Jiff is fixed to use symlink sniffing on file paths provided by the TZ environment variable.

Bug fixes:

0.1.9 (2024-08-23)

This release introduces new options for controlling the precision of fractional seconds when printing Zoned, Timestamp, civil::DateTime or civil::Time values. This is principally exposed via jiff::fmt::temporal::DateTimePrinter::precision, but it's also available via the standard library's formatting machinery. For example, if zdt is a jiff::Zoned, then format!("{zdt:.6}") will format it into a string with microsecond precision, even if its fractional component is zero.

Enhancements:

0.1.8 (2024-08-19)

This releases fixes a build error in Jiff's alloc-only configuration. This regression was introduced in jiff 0.1.6.

Bug fixes:

0.1.7 (2024-08-18)

This release relaxes Jiff's dependency on windows-sys to include multiple semver incompatible releases. The purpose of this relaxation is to enable Jiff to work with different versions of windows-sys in the hopes that this reduces the likelihood that multiple copies of windows-sys are included in your dependency tree.

Dependencies:

0.1.6 (2024-08-18)

This release includes a new top-level type, SignedDuration, that provides a near exact replica of std::time::Duration, but signed. It is meant to provide alternative APIs for working with durations at a lower level than what Span provides, and to facilitate better integration with the standard library.

A SignedDuration has also been integrated with all of Jiff's datetime types. For example, previously, Zoned::checked_add only accepted a concrete jiff::Span. But now it accepts a jiff::Span, jiff::SignedDuration or even a std::time::Duration. Moreover, all of the until and since APIs on datetime types have been ported and copied to return SignedDuration under the duration_until and duration_since names.

This marks an initial integration phase with SignedDuration. It is planned to integrate it more with the datetime types. Currently, there are integrations on Timestamp and Span, but more will be added in the future.

Overall, folks should still use Span. That is the intended default duration type in Jiff and will continue to be. Users of Jiff may find SignedDuration useful in contexts where speed is important or when one needs to integrate with the standard library.

This release also includes a few related deprecations as the APIs involving std::time::Duration are phased out in favor of SignedDuration.

Deprecations:

Basically, all of the above APIs either accept or return a std::time::Duration. To avoid breaking changes at this point, new methods for SignedDuration were added. For example, Timestamp::as_jiff_duration. In jiff 0.2, the above deprecated methods will be removed and replaced with equivalent methods that accept or return a SignedDuration instead. Callers can then convert between a SignedDuration and a std::time::Duration using appropriate TryFrom trait implementations.

Enhancements:

Performance:

0.1.5 (2024-08-09)

This release includes some improvements and bug fixes, particularly for Jiff's strtime APIs.

Enhancements:

Bug fixes:

0.1.4 (2024-08-01)

This release includes a small improvement for strptime that permits %Y%m%d to parse 20240730 correctly.

Enhancements:

0.1.3 (2024-07-30)

This release features support for wasm32-unknown-unknown. That is, when Jiff's new js crate feature is enabled, Jiff will automatically use JavaScript APIs to determine the current time and time zone.

Enhancements:

0.1.2 (2024-07-28)

This release features a few new APIs that a need for arose while experimenting with actually using Jiff in real projects. Namely, the jiff::fmt::strtime module now has %f and %.f directives for parsing and formatting fractional seconds. And both jiff::fmt::rfc2822 and jiff::fmt::strtime now have support for skipping weekday checks during parsing. (Previously, Jiff required that an English weekday be consistent with the date parsed, and there was no way to opt out. While this is still the default behavior, callers can disable this check.)

Enhancements:

Bug fixes:

0.1.1 (2024-07-25)

This is a new semver compatible release. The principle addition are APIs for converting between a jiff::Span and a std::time::Duration. Specifically, there are now TryFrom<Span> for Duration and TryFrom<Duration> for Span trait implementations. There is also a Span::to_duration, which requires a relative date, for converting spans with non-uniform units (like months) to a Duration.

Enhancements:

Bug fixes:

0.1.0 (2024-07-21)

The initial release of Jiff.