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.
Implementations§
Source§impl Unit
impl Unit
Sourcepub(crate) fn nanoseconds(self) -> ri128<{ i128::MIN }, { i128::MAX }>
pub(crate) fn nanoseconds(self) -> ri128<{ i128::MIN }, { i128::MAX }>
Returns the number of nanoseconds in this unit as a 128-bit integer.
§Panics
When this unit is always variable. That is, years or months.
Sourcefn is_variable(self) -> bool
fn is_variable(self) -> bool
Returns true when this unit is definitively variable.
In effect, this is any unit bigger than ‘day’, because any such unit can vary in time depending on its reference point. A ‘day’ can as well, but we sorta special case ‘day’ to mean ‘24 hours’ for cases where the user is dealing with civil time.
Sourcepub(crate) fn singular(&self) -> &'static str
pub(crate) fn singular(&self) -> &'static str
A human readable singular description of this unit of time.
Sourcepub(crate) fn plural(&self) -> &'static str
pub(crate) fn plural(&self) -> &'static str
A human readable plural description of this unit of time.
Sourcefn from_usize(n: usize) -> Option<Unit>
fn from_usize(n: usize) -> Option<Unit>
The inverse of unit as usize
.