Bug: 178993043

Clone this repo:
  1. 7d0843e Enable tests that depend on bincode by Martin Geisler · 5 weeks ago main master
  2. 27d49a3 Remove the libchrono_clock variant and local patches. by Andrew Walbran · 9 weeks ago
  3. 52de776 Avoid android-tzdata and iana-time-zone dependencies. by Andrew Walbran · 3 months ago
  4. c0dc615 Upgrade chrono to 0.4.34 by Andrew Walbran · 3 months ago
  5. 894d6ce Migrate to cargo_embargo. am: 38a285c91b am: 97160aa095 am: c739773b80 by Andrew Walbran · 6 months ago emu-34-2-dev

Chrono: Timezone-aware date and time handling

Chrono GitHub Actions Chrono on crates.io Chrono on docs.rs Chat codecov.io

Chrono aims to provide all functionality needed to do correct operations on dates and times in the proleptic Gregorian calendar:

  • The DateTime type is timezone-aware by default, with separate timezone-naive types.
  • Operations that may produce an invalid or ambiguous date and time return Option or LocalResult.
  • Configurable parsing and formatting with an strftime inspired date and time formatting syntax.
  • The Local timezone works with the current timezone of the OS.
  • Types and operations are implemented to be reasonably efficient.

Timezone data is not shipped with chrono by default to limit binary sizes. Use the companion crate Chrono-TZ or tzfile for full timezone support.


See docs.rs for the API reference.


  • Only the proleptic Gregorian calendar (i.e. extended to support older dates) is supported.
  • Date types are limited to about +/- 262,000 years from the common epoch.
  • Time types are limited to nanosecond accuracy.
  • Leap seconds can be represented, but Chrono does not fully support them. See Leap Second Handling.

Crate features

Default features:

  • alloc: Enable features that depend on allocation (primarily string formatting)
  • std: Enables functionality that depends on the standard library. This is a superset of alloc and adds interoperation with standard library types and traits.
  • clock: Enables reading the local timezone (Local). This is a superset of now.
  • now: Enables reading the system time (now)
  • wasmbind: Interface with the JS Date API for the wasm32 target.

Optional features:

  • serde: Enable serialization/deserialization via serde.
  • rkyv: Enable serialization/deserialization via rkyv.
  • rustc-serialize: Enable serialization/deserialization via rustc-serialize (deprecated).
  • arbitrary: construct arbitrary instances of a type with the Arbitrary crate.
  • unstable-locales: Enable localization. This adds various methods with a _localized suffix. The implementation and API may change or even be removed in a patch release. Feedback welcome.

Rust version requirements

The Minimum Supported Rust Version (MSRV) is currently Rust 1.61.0.

The MSRV is explicitly tested in CI. It may be bumped in minor releases, but this is not done lightly.


This project is licensed under either of

at your option.