pub enum Unit {
Year = 9,
Month = 8,
Week = 7,
Day = 6,
Hour = 5,
Minute = 4,
Second = 3,
Millisecond = 2,
Microsecond = 1,
Nanosecond = 0,
}
Expand description
A way to refer to a single calendar or clock unit.
This type is principally used in APIs involving a Span
, which is a
duration of time. For example, routines like Zoned::until
permit
specifying the largest unit of the span returned:
use jiff::{Unit, Zoned};
let zdt1: Zoned = "2024-07-06 17:40-04[America/New_York]".parse()?;
let zdt2: Zoned = "2024-11-05 08:00-05[America/New_York]".parse()?;
let span = zdt1.until((Unit::Year, &zdt2))?;
assert_eq!(format!("{span:#}"), "3mo 29d 14h 20m");
But a Unit
is also used in APIs for rounding datetimes themselves:
use jiff::{Unit, Zoned};
let zdt: Zoned = "2024-07-06 17:44:22.158-04[America/New_York]".parse()?;
let nearest_minute = zdt.round(Unit::Minute)?;
assert_eq!(
nearest_minute.to_string(),
"2024-07-06T17:44:00-04:00[America/New_York]",
);
§Example: ordering
This example demonstrates that Unit
has an ordering defined such that
bigger units compare greater than smaller units.
use jiff::Unit;
assert!(Unit::Year > Unit::Nanosecond);
assert!(Unit::Day > Unit::Hour);
assert!(Unit::Hour > Unit::Minute);
assert!(Unit::Hour > Unit::Minute);
assert_eq!(Unit::Hour, Unit::Hour);
Variants§
Year = 9
A Gregorian calendar year. It usually has 365 days for non-leap years, and 366 days for leap years.
Month = 8
A Gregorian calendar month. It usually has one of 28, 29, 30 or 31 days.
Week = 7
A week is 7 days that either begins on Sunday or Monday.
Day = 6
A day is usually 24 hours, but some days may have different lengths due to time zone transitions.
Hour = 5
An hour is always 60 minutes.
Minute = 4
A minute is always 60 seconds. (Jiff behaves as if leap seconds do not exist.)
Second = 3
A second is always 1,000 milliseconds.
Millisecond = 2
A millisecond is always 1,000 microseconds.
Microsecond = 1
A microsecond is always 1,000 nanoseconds.
Nanosecond = 0
A nanosecond is the smallest granularity of time supported by Jiff.