Module jiff

Source
Expand description

Modern date and time library.


jiff is a modern date and time library for Rust that prioritizes correctness, ergonomics, and performance. It provides timezone-aware date arithmetic, high-precision timestamps, and comprehensive parsing and formatting capabilities.

The library offers several core types: Timestamp for nanosecond-precision instants in time, Zoned for timezone-aware date-times, DateTime for calendar date-times without timezone, Date for calendar dates, and Time for wall clock times.

Jiff excels at timezone-aware operations and automatically handles daylight saving time transitions correctly. It includes built-in support for the IANA Time Zone Database and provides powerful duration arithmetic that respects calendar rules.

The API design emphasizes preventing common datetime bugs through the type system, making operations like cross-timezone comparisons and DST-aware arithmetic safe by default.

§Examples

Working with timestamps and basic operations:

use jiff::{Timestamp, civil::Date};

// Current timestamp
let now = Timestamp::now();
println!("Now: {}", now);

// Create a specific date
let date = Date::new(2024, 3, 15).unwrap();
println!("Date: {}", date);

// Get Unix timestamp
let unix_seconds = now.as_second();
println!("Unix timestamp: {}", unix_seconds);

// Parse an RFC 3339 timestamp
let parsed: Timestamp = "2024-03-15T14:30:00Z".parse().unwrap();
println!("Parsed: {}", parsed);

Date arithmetic and spans:

use jiff::{civil::Date, ToSpan};

// Create dates
let start = Date::new(2024, 3, 15).unwrap();
let end = Date::new(2024, 12, 25).unwrap();

// Calculate span between dates
let span = start.until(end).unwrap();
println!("Span: {}", span);

// Add one month using ToSpan
let next_month = start.checked_add(1.month()).unwrap();
println!("Next month: {}", next_month);

// Add days
let future = start.checked_add(30.days()).unwrap();
println!("30 days later: {}", future);

Modules§

_documentation
Longer form documentation for Jiff.
civil
Facilities for dealing with inexact dates and times.
fmt
Configurable support for printing and parsing datetimes and durations.
tz
Routines for interacting with time zones and the zoneinfo database.

Structs§

Error
An error that can occur in this crate.
SignedDuration
A signed duration of time represented as a 96-bit integer of nanoseconds.
SignedDurationRound
Options for SignedDuration::round.
Span
A span of time represented via a mixture of calendar and clock units.
SpanArithmetic
Options for Span::checked_add and Span::checked_sub.
SpanCompare
Options for Span::compare.
SpanFieldwise
A wrapper for Span that implements the Hash, Eq and PartialEq traits.
SpanRelativeTo
A relative datetime for use with Span APIs.
SpanRound
Options for Span::round.
SpanTotal
Options for Span::total.
Timestamp
An instant in time represented as the number of nanoseconds since the Unix epoch.
TimestampArithmetic
Options for Timestamp::checked_add and Timestamp::checked_sub.
TimestampDifference
Options for Timestamp::since and Timestamp::until.
TimestampDisplayWithOffset
A type for formatting a Timestamp with a specific offset.
TimestampRound
Options for Timestamp::round.
TimestampSeries
An iterator over periodic timestamps, created by Timestamp::series.
Zoned
A time zone aware instant in time.
ZonedArithmetic
Options for Timestamp::checked_add and Timestamp::checked_sub.
ZonedDifference
Options for Zoned::since and Zoned::until.
ZonedRound
Options for Zoned::round.
ZonedWith
A builder for setting the fields on a Zoned.

Enums§

RoundMode
The mode for dealing with the remainder when rounding datetimes or spans.
Unit
A way to refer to a single calendar or clock unit.

Traits§

ToSpan
A trait for enabling concise literals for creating Span values.