Instant

Struct Instant 

Source
pub struct Instant { /* private fields */ }
Expand description

An absolute point in time.

An Instant is a wrapper around a signed integer that holds the number of nanoseconds since an arbitrary point in time, e.g. system startup.

  • A value of 0 is arbitrary.
  • Values < 0 indicate a time before the start point.

Implementations§

Source§

impl Instant

Source

pub const ZERO: Instant

The zero Instant.

An arbitrary point on the absolute timescale.

Source

pub fn from_nanos(nanos: i64) -> Instant

Construct an Instant from a number of nanoseconds.

§Examples
let instant = Instant::from_nanos(1_234_567_890);
assert_eq!(instant.as_nanos(), 1_234_567_890);
Source

pub const fn as_nanos(&self) -> i64

The number of nanoseconds that have passed since the ZERO point.

Source

pub const fn secs(&self) -> i64

The number of whole seconds since the ZERO point.

Source

pub const fn subsec_nanos(&self) -> i64

The number of fractional nanoseconds since the ZERO point.

Source

pub fn duration_since(&self, earlier: Instant) -> Duration

The amount of time elapsed since an earlier Instant, or 0.

§Examples
let earlier = Instant::from_nanos(1_234_567_890);
let later = Instant::from_nanos(2_234_567_890);
assert_eq!(later.duration_since(earlier), Duration::from_nanos(1_000_000_000));
assert_eq!(earlier.duration_since(later), Duration::ZERO);
assert_eq!(earlier.duration_since(earlier), Duration::ZERO);
Source

pub fn checked_duration_since(&self, earlier: Instant) -> Option<Duration>

The amount of time elapsed since an earlier Instant, or None.

§Examples
let earlier = Instant::from_nanos(1_234_567_890);
let later = Instant::from_nanos(2_234_567_890);
assert_eq!(later.checked_duration_since(earlier), Some(Duration::from_nanos(1_000_000_000)));
assert_eq!(earlier.checked_duration_since(later), None);
assert_eq!(earlier.checked_duration_since(earlier), Some(Duration::ZERO));
Source

pub fn saturating_duration_since(&self, earlier: Instant) -> Duration

The amount of time elapsed since an earlier Instant, or 0.

Source

pub fn checked_add(&self, duration: Duration) -> Option<Instant>

Returns the result of self + duration if the result can be represented by the underlying data structure, None otherwise.

§Examples
let instant = Instant::from_nanos(1_234_567_890);
assert_eq!(instant.checked_add(Duration::from_secs(1)), Some(Instant::from_nanos(2_234_567_890)));
assert_eq!(instant.checked_add(Duration::ZERO), Some(instant));
Source

pub fn checked_sub(&self, duration: Duration) -> Option<Instant>

Returns the result of self - duration if the result can be represented by the underlying data structure, None otherwise.

§Examples
let instant = Instant::from_nanos(1_234_567_890);
assert_eq!(instant.checked_sub(Duration::from_secs(1)), Some(Instant::from_nanos(234_567_890)));
assert_eq!(instant.checked_sub(Duration::from_secs(2)), Some(Instant::from_nanos(-765_432_110)));
assert_eq!(instant.checked_sub(Duration::ZERO), Some(instant));
Source

pub fn from_std(instant: Instant) -> Instant

Construct an Instant from a std::time::Instant based its the elapsed time.

Can be used if you have a base std::time::Instant where you can create Instants as needed.

§Example
let std_instant = std::time::Instant::now();
std::thread::sleep(Duration::from_secs(1));
assert!(Instant::from_std(std_instant) >= Instant::from_nanos(1_000_000_000));
Source

pub fn from_system(sys_time: SystemTime) -> Instant

Construct an Instant from a std::time::SystemTime based on the distance from the unix epoch.

§Example
let sys_time = std::time::SystemTime::now();
assert!(Instant::from_system(sys_time) >= Instant::from_nanos(0));
Source

pub fn to_std(&self, base_instant: Instant) -> Instant

Convert this Instant to a std::time::Instant using a base instant.

This function takes a base std::time::Instant and adds the duration represented by this Instant to create a corresponding std::time::Instant.

§Example
let base = std::time::Instant::now();
let instant = Instant::from_nanos(1_000_000_000); // 1 second
let std_instant = instant.to_std(base);

// The resulting std_instant should be 1 second after base
assert!(std_instant.duration_since(base) == Duration::from_secs(1));
Source

pub fn to_system(&self, base_system_time: SystemTime) -> SystemTime

Convert this Instant to a std::time::SystemTime using a base system time.

This function takes a base std::time::SystemTime and adds the duration represented by this Instant to create a corresponding std::time::SystemTime.

§Example
let base = std::time::SystemTime::now();
let instant = Instant::from_nanos(1_000_000_000); // 1 second
let sys_time = instant.to_system(base);

// The resulting sys_time should be 1 second after base
assert!(sys_time.duration_since(base).unwrap() == Duration::from_secs(1));

Trait Implementations§

Source§

impl Add<Duration> for Instant

Source§

type Output = Instant

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Duration) -> <Instant as Add<Duration>>::Output

Performs the + operation. Read more
Source§

impl AddAssign<Duration> for Instant

Source§

fn add_assign(&mut self, rhs: Duration)

Performs the += operation. Read more
Source§

impl Clone for Instant

Source§

fn clone(&self) -> Instant

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Instant

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for Instant

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Hash for Instant

Source§

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

Feeds this value into the given Hasher. Read more
1.3.0§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Instant

Source§

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

This method returns an Ordering between self and other. Read more
1.21.0§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Instant

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Instant

Source§

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

This method returns an ordering between self and other values if one exists. Read more
1.0.0§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Sub<Duration> for Instant

Source§

type Output = Instant

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Duration) -> <Instant as Sub<Duration>>::Output

Performs the - operation. Read more
Source§

impl Sub for Instant

Source§

type Output = Duration

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Instant) -> <Instant as Sub>::Output

Performs the - operation. Read more
Source§

impl SubAssign<Duration> for Instant

Source§

fn sub_assign(&mut self, rhs: Duration)

Performs the -= operation. Read more
Source§

impl Copy for Instant

Source§

impl Eq for Instant

Source§

impl StructuralPartialEq for Instant

Auto Trait Implementations§

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

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

§

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

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
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> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> ToString for T
where T: Display + ?Sized,

§

fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

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

Performs the conversion.
§

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

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

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

Performs the conversion.