Enum Unit

enum Unit

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");

# Ok::<(), Box<dyn std::error::Error>>(())

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]",
);

# Ok::<(), Box<dyn std::error::Error>>(())

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

A Gregorian calendar year. It usually has 365 days for non-leap years, and 366 days for leap years.

Month

A Gregorian calendar month. It usually has one of 28, 29, 30 or 31 days.

Week

A week is 7 days that either begins on Sunday or Monday.

Day

A day is usually 24 hours, but some days may have different lengths due to time zone transitions.

Hour

An hour is always 60 minutes.

Minute

A minute is always 60 seconds. (Jiff behaves as if leap seconds do not exist.)

Second

A second is always 1,000 milliseconds.

Millisecond

A millisecond is always 1,000 microseconds.

Microsecond

A microsecond is always 1,000 nanoseconds.

Nanosecond

A nanosecond is the smallest granularity of time supported by Jiff.

Implementations

impl Clone for Unit

fn clone(self: &Self) -> Unit

impl Copy for Unit

impl Debug for Unit

fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result

impl Eq for Unit

impl Freeze for Unit

impl From for Unit

fn from(u: FractionalUnit) -> Unit

impl Hash for Unit

fn hash<__H: $crate::hash::Hasher>(self: &Self, state: &mut __H)

impl Ord for Unit

fn cmp(self: &Self, other: &Unit) -> Ordering

impl PartialEq for Unit

fn eq(self: &Self, other: &Unit) -> bool

impl PartialOrd for Unit

fn partial_cmp(self: &Self, other: &Unit) -> Option<Ordering>

impl RefUnwindSafe for Unit

impl Send for Unit

impl StructuralPartialEq for Unit

impl Sync for Unit

impl Unpin for Unit

impl UnsafeUnpin for Unit

impl UnwindSafe for Unit

impl<T> Any for Unit

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for Unit

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for Unit

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> CloneToUninit for Unit

unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)

impl<T> From for Unit

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Unit

fn to_owned(self: &Self) -> T
fn clone_into(self: &Self, target: &mut T)

impl<T, U> Into for Unit

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for Unit

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for Unit

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>