pub struct Time { /* private fields */ }
Expand description
The clock time within a given date. Nanosecond precision.
All minutes are assumed to have exactly 60 seconds; no attempt is made to handle leap seconds (either positive or negative).
When comparing two Time
s, they are assumed to be in the same calendar date.
Implementations
sourceimpl Time
impl Time
sourcepub const MIDNIGHT: Self = _
pub const MIDNIGHT: Self = _
Create a Time
that is exactly midnight.
assert_eq!(Time::MIDNIGHT, time!(0:00));
Runsourcepub const fn from_hms(
hour: u8,
minute: u8,
second: u8
) -> Result<Self, ComponentRange>
pub const fn from_hms(
hour: u8,
minute: u8,
second: u8
) -> Result<Self, ComponentRange>
Attempt to create a Time
from the hour, minute, and second.
assert!(Time::from_hms(1, 2, 3).is_ok());
Runassert!(Time::from_hms(24, 0, 0).is_err()); // 24 isn't a valid hour.
assert!(Time::from_hms(0, 60, 0).is_err()); // 60 isn't a valid minute.
assert!(Time::from_hms(0, 0, 60).is_err()); // 60 isn't a valid second.
Runsourcepub const fn from_hms_milli(
hour: u8,
minute: u8,
second: u8,
millisecond: u16
) -> Result<Self, ComponentRange>
pub const fn from_hms_milli(
hour: u8,
minute: u8,
second: u8,
millisecond: u16
) -> Result<Self, ComponentRange>
Attempt to create a Time
from the hour, minute, second, and millisecond.
assert!(Time::from_hms_milli(1, 2, 3, 4).is_ok());
Runassert!(Time::from_hms_milli(24, 0, 0, 0).is_err()); // 24 isn't a valid hour.
assert!(Time::from_hms_milli(0, 60, 0, 0).is_err()); // 60 isn't a valid minute.
assert!(Time::from_hms_milli(0, 0, 60, 0).is_err()); // 60 isn't a valid second.
assert!(Time::from_hms_milli(0, 0, 0, 1_000).is_err()); // 1_000 isn't a valid millisecond.
Runsourcepub const fn from_hms_micro(
hour: u8,
minute: u8,
second: u8,
microsecond: u32
) -> Result<Self, ComponentRange>
pub const fn from_hms_micro(
hour: u8,
minute: u8,
second: u8,
microsecond: u32
) -> Result<Self, ComponentRange>
Attempt to create a Time
from the hour, minute, second, and microsecond.
assert!(Time::from_hms_micro(1, 2, 3, 4).is_ok());
Runassert!(Time::from_hms_micro(24, 0, 0, 0).is_err()); // 24 isn't a valid hour.
assert!(Time::from_hms_micro(0, 60, 0, 0).is_err()); // 60 isn't a valid minute.
assert!(Time::from_hms_micro(0, 0, 60, 0).is_err()); // 60 isn't a valid second.
assert!(Time::from_hms_micro(0, 0, 0, 1_000_000).is_err()); // 1_000_000 isn't a valid microsecond.
Runsourcepub const fn from_hms_nano(
hour: u8,
minute: u8,
second: u8,
nanosecond: u32
) -> Result<Self, ComponentRange>
pub const fn from_hms_nano(
hour: u8,
minute: u8,
second: u8,
nanosecond: u32
) -> Result<Self, ComponentRange>
Attempt to create a Time
from the hour, minute, second, and nanosecond.
assert!(Time::from_hms_nano(1, 2, 3, 4).is_ok());
Runassert!(Time::from_hms_nano(24, 0, 0, 0).is_err()); // 24 isn't a valid hour.
assert!(Time::from_hms_nano(0, 60, 0, 0).is_err()); // 60 isn't a valid minute.
assert!(Time::from_hms_nano(0, 0, 60, 0).is_err()); // 60 isn't a valid second.
assert!(Time::from_hms_nano(0, 0, 0, 1_000_000_000).is_err()); // 1_000_000_000 isn't a valid nanosecond.
Runsourcepub const fn as_hms(self) -> (u8, u8, u8)
pub const fn as_hms(self) -> (u8, u8, u8)
Get the clock hour, minute, and second.
assert_eq!(time!(0:00:00).as_hms(), (0, 0, 0));
assert_eq!(time!(23:59:59).as_hms(), (23, 59, 59));
Runsourcepub const fn as_hms_milli(self) -> (u8, u8, u8, u16)
pub const fn as_hms_milli(self) -> (u8, u8, u8, u16)
Get the clock hour, minute, second, and millisecond.
assert_eq!(time!(0:00:00).as_hms_milli(), (0, 0, 0, 0));
assert_eq!(time!(23:59:59.999).as_hms_milli(), (23, 59, 59, 999));
Runsourcepub const fn as_hms_micro(self) -> (u8, u8, u8, u32)
pub const fn as_hms_micro(self) -> (u8, u8, u8, u32)
Get the clock hour, minute, second, and microsecond.
assert_eq!(time!(0:00:00).as_hms_micro(), (0, 0, 0, 0));
assert_eq!(
time!(23:59:59.999_999).as_hms_micro(),
(23, 59, 59, 999_999)
);
Runsourcepub const fn as_hms_nano(self) -> (u8, u8, u8, u32)
pub const fn as_hms_nano(self) -> (u8, u8, u8, u32)
Get the clock hour, minute, second, and nanosecond.
assert_eq!(time!(0:00:00).as_hms_nano(), (0, 0, 0, 0));
assert_eq!(
time!(23:59:59.999_999_999).as_hms_nano(),
(23, 59, 59, 999_999_999)
);
Runsourcepub const fn hour(self) -> u8
pub const fn hour(self) -> u8
Get the clock hour.
The returned value will always be in the range 0..24
.
assert_eq!(time!(0:00:00).hour(), 0);
assert_eq!(time!(23:59:59).hour(), 23);
Runsourcepub const fn minute(self) -> u8
pub const fn minute(self) -> u8
Get the minute within the hour.
The returned value will always be in the range 0..60
.
assert_eq!(time!(0:00:00).minute(), 0);
assert_eq!(time!(23:59:59).minute(), 59);
Runsourcepub const fn second(self) -> u8
pub const fn second(self) -> u8
Get the second within the minute.
The returned value will always be in the range 0..60
.
assert_eq!(time!(0:00:00).second(), 0);
assert_eq!(time!(23:59:59).second(), 59);
Runsourcepub const fn millisecond(self) -> u16
pub const fn millisecond(self) -> u16
Get the milliseconds within the second.
The returned value will always be in the range 0..1_000
.
assert_eq!(time!(0:00).millisecond(), 0);
assert_eq!(time!(23:59:59.999).millisecond(), 999);
Runsourcepub const fn microsecond(self) -> u32
pub const fn microsecond(self) -> u32
Get the microseconds within the second.
The returned value will always be in the range 0..1_000_000
.
assert_eq!(time!(0:00).microsecond(), 0);
assert_eq!(time!(23:59:59.999_999).microsecond(), 999_999);
Runsourcepub const fn nanosecond(self) -> u32
pub const fn nanosecond(self) -> u32
Get the nanoseconds within the second.
The returned value will always be in the range 0..1_000_000_000
.
assert_eq!(time!(0:00).nanosecond(), 0);
assert_eq!(time!(23:59:59.999_999_999).nanosecond(), 999_999_999);
Runsourcepub const fn replace_hour(self, hour: u8) -> Result<Self, ComponentRange>
pub const fn replace_hour(self, hour: u8) -> Result<Self, ComponentRange>
Replace the clock hour.
assert_eq!(
time!(01:02:03.004_005_006).replace_hour(7),
Ok(time!(07:02:03.004_005_006))
);
assert!(time!(01:02:03.004_005_006).replace_hour(24).is_err()); // 24 isn't a valid hour
Runsourcepub const fn replace_minute(self, minute: u8) -> Result<Self, ComponentRange>
pub const fn replace_minute(self, minute: u8) -> Result<Self, ComponentRange>
Replace the minutes within the hour.
assert_eq!(
time!(01:02:03.004_005_006).replace_minute(7),
Ok(time!(01:07:03.004_005_006))
);
assert!(time!(01:02:03.004_005_006).replace_minute(60).is_err()); // 60 isn't a valid minute
Runsourcepub const fn replace_second(self, second: u8) -> Result<Self, ComponentRange>
pub const fn replace_second(self, second: u8) -> Result<Self, ComponentRange>
Replace the seconds within the minute.
assert_eq!(
time!(01:02:03.004_005_006).replace_second(7),
Ok(time!(01:02:07.004_005_006))
);
assert!(time!(01:02:03.004_005_006).replace_second(60).is_err()); // 60 isn't a valid second
Runsourcepub const fn replace_millisecond(
self,
millisecond: u16
) -> Result<Self, ComponentRange>
pub const fn replace_millisecond(
self,
millisecond: u16
) -> Result<Self, ComponentRange>
Replace the milliseconds within the second.
assert_eq!(
time!(01:02:03.004_005_006).replace_millisecond(7),
Ok(time!(01:02:03.007))
);
assert!(time!(01:02:03.004_005_006).replace_millisecond(1_000).is_err()); // 1_000 isn't a valid millisecond
Runsourcepub const fn replace_microsecond(
self,
microsecond: u32
) -> Result<Self, ComponentRange>
pub const fn replace_microsecond(
self,
microsecond: u32
) -> Result<Self, ComponentRange>
Replace the microseconds within the second.
assert_eq!(
time!(01:02:03.004_005_006).replace_microsecond(7_008),
Ok(time!(01:02:03.007_008))
);
assert!(time!(01:02:03.004_005_006).replace_microsecond(1_000_000).is_err()); // 1_000_000 isn't a valid microsecond
Runsourcepub const fn replace_nanosecond(
self,
nanosecond: u32
) -> Result<Self, ComponentRange>
pub const fn replace_nanosecond(
self,
nanosecond: u32
) -> Result<Self, ComponentRange>
Replace the nanoseconds within the second.
assert_eq!(
time!(01:02:03.004_005_006).replace_nanosecond(7_008_009),
Ok(time!(01:02:03.007_008_009))
);
assert!(time!(01:02:03.004_005_006).replace_nanosecond(1_000_000_000).is_err()); // 1_000_000_000 isn't a valid nanosecond
Runsourceimpl Time
impl Time
sourcepub fn format_into(
self,
output: &mut impl Write,
format: &impl Formattable + ?Sized
) -> Result<usize, Format>
Available on crate feature formatting
only.
pub fn format_into(
self,
output: &mut impl Write,
format: &impl Formattable + ?Sized
) -> Result<usize, Format>
formatting
only.Format the Time
using the provided format description.
sourcepub fn format(self, format: &impl Formattable + ?Sized) -> Result<String, Format>
Available on crate feature formatting
only.
pub fn format(self, format: &impl Formattable + ?Sized) -> Result<String, Format>
formatting
only.Format the Time
using the provided format description.
let format = format_description::parse("[hour]:[minute]:[second]")?;
assert_eq!(time!(12:00).format(&format)?, "12:00:00");
Runsourceimpl Time
impl Time
sourcepub fn parse(
input: &str,
description: &impl Parsable + ?Sized
) -> Result<Self, Parse>
Available on crate feature parsing
only.
pub fn parse(
input: &str,
description: &impl Parsable + ?Sized
) -> Result<Self, Parse>
parsing
only.Parse a Time
from the input using the provided format
description.
let format = format_description::parse("[hour]:[minute]:[second]")?;
assert_eq!(Time::parse("12:00:00", &format)?, time!(12:00));
RunTrait Implementations
sourceimpl Add<Duration> for Time
impl Add<Duration> for Time
sourcefn add(self, duration: StdDuration) -> Self::Output
fn add(self, duration: StdDuration) -> Self::Output
Add the sub-day time of the std::time::Duration
to the Time
. Wraps on overflow.
assert_eq!(time!(12:00) + 2.std_hours(), time!(14:00));
assert_eq!(time!(23:59:59) + 2.std_seconds(), time!(0:00:01));
Runsourceimpl AddAssign<Duration> for Time
impl AddAssign<Duration> for Time
sourcefn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moresourceimpl AddAssign<Duration> for Time
impl AddAssign<Duration> for Time
sourcefn add_assign(&mut self, rhs: StdDuration)
fn add_assign(&mut self, rhs: StdDuration)
+=
operation. Read moresourceimpl<'a> Deserialize<'a> for Time
Available on crate feature serde
only.
impl<'a> Deserialize<'a> for Time
serde
only.sourcefn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
sourceimpl Distribution<Time> for Standard
Available on crate feature rand
only.
impl Distribution<Time> for Standard
rand
only.sourcefn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Time
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Time
T
, using rng
as the source of randomness.sourcefn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>where
R: Rng,
fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>where
R: Rng,
T
, using rng
as
the source of randomness. Read moresourceimpl Ord for Time
impl Ord for Time
1.21.0 · sourceconst fn max(self, other: Self) -> Self
const fn max(self, other: Self) -> Self
1.21.0 · sourceconst fn min(self, other: Self) -> Self
const fn min(self, other: Self) -> Self
1.50.0 · sourceconst fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
const fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
sourceimpl PartialOrd<Time> for Time
impl PartialOrd<Time> for Time
sourcefn partial_cmp(&self, other: &Time) -> Option<Ordering>
fn partial_cmp(&self, other: &Time) -> Option<Ordering>
1.0.0 · sourceconst fn le(&self, other: &Rhs) -> bool
const fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresourceimpl Sub<Duration> for Time
impl Sub<Duration> for Time
sourcefn sub(self, duration: StdDuration) -> Self::Output
fn sub(self, duration: StdDuration) -> Self::Output
Subtract the sub-day time of the std::time::Duration
from the Time
. Wraps on overflow.
assert_eq!(time!(14:00) - 2.std_hours(), time!(12:00));
assert_eq!(time!(0:00:01) - 2.std_seconds(), time!(23:59:59));
Runsourceimpl Sub<Time> for Time
impl Sub<Time> for Time
sourcefn sub(self, rhs: Self) -> Self::Output
fn sub(self, rhs: Self) -> Self::Output
Subtract two Time
s, returning the Duration
between. This assumes both Time
s are in
the same calendar day.
assert_eq!(time!(0:00) - time!(0:00), 0.seconds());
assert_eq!(time!(1:00) - time!(0:00), 1.hours());
assert_eq!(time!(0:00) - time!(1:00), (-1).hours());
assert_eq!(time!(0:00) - time!(23:00), (-23).hours());
Runsourceimpl SubAssign<Duration> for Time
impl SubAssign<Duration> for Time
sourcefn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moresourceimpl SubAssign<Duration> for Time
impl SubAssign<Duration> for Time
sourcefn sub_assign(&mut self, rhs: StdDuration)
fn sub_assign(&mut self, rhs: StdDuration)
-=
operation. Read more