Enum Unit

pub 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 = 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.

Trait Implementations

impl Clone for Unit

fn clone(&self) -> Unit

impl Copy for Unit

impl Debug for Unit

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

impl Eq for Unit

impl From<FractionalUnit> for Unit

fn from(u: FractionalUnit) -> Unit

impl Hash for Unit

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

impl Ord for Unit

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

impl PartialEq for Unit

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

impl PartialOrd for Unit

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

impl StructuralPartialEq for Unit

Auto Trait Implementations

impl Freeze for Unit

impl RefUnwindSafe for Unit

impl Send for Unit

impl Sync for Unit

impl Unpin for Unit

impl UnsafeUnpin for Unit

impl UnwindSafe for Unit

Blanket Implementations

impl<T> Any for Unit where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Unit where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Unit where T: ?Sized,

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

impl<T> CloneToUninit for Unit where T: Clone,

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

impl<T> From<T> for Unit

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Unit where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T, U> Into<U> for Unit where U: From<T>,

fn into(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<U> for Unit where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for Unit where U: TryFrom<T>,

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