mirror of
https://github.com/chronotope/chrono.git
synced 2025-09-30 14:32:19 +00:00

- Added tests for creating the maximum and minimum allowable values of Durations having a magnitude of seconds, testing the limits plus one value beyond the limits in both directions. These tests all pass. - Expanded the tests for creating the maximum and minimum allowable values of Durations having a magnitude of milliseconds. These tests examine the results in more detail, document what is being tested, and also test one value beyond the limits in both directions. Notably, the test for Duration::milliseconds() construction for i64::MIN currently fails, as it is erroneously allowed. This test is ignored for now, until the fix is applied. - Expanded the tests for creating the maximum and minimum allowable values of Durations having a magnitude of microseconds and nanoseconds. These tests examine the results in more detail, document what is being tested, and also test one value beyond the limits in both directions. They also test the maximum reportable value from .num_*() and the maximum storable value of the Duration separately. - Separated out the tests for MAX and MIN, for clarity. - Added additional tests for addition and subtraction operations on Durations, ensuring that equivalent tests are performed against both operations, such as adding and subtracting zero, adding and subtracting one nanosecond, and others. - Added tests for greater-than and less-than comparison of two Durations, to ensure that internal representation of partial seconds is correctly ordered.
Chrono: Timezone-aware date and time handling
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
orLocalResult
. - 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.
Documentation
See docs.rs for the API reference.
Limitations
- 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 ofalloc
and adds interoperation with standard library types and traits.clock
: Enables reading the local timezone (Local
). This is a superset ofnow
.now
: Enables reading the system time (now
)wasmbind
: Interface with the JS Date API for thewasm32
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.
License
This project is licensed under either of
at your option.
Languages
Rust
100%