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 Times, they are assumed to be in the same calendar date.
Implementations§
source§impl 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));sourcepub 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());assert!(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.sourcepub 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());assert!(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.sourcepub 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());assert!(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.sourcepub 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());assert!(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.sourcepub 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));sourcepub 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));sourcepub 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)
);sourcepub 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)
);sourcepub 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);sourcepub 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);sourcepub 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);sourcepub 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);sourcepub 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);sourcepub 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);sourcepub 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 hoursourcepub 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 minutesourcepub 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 secondsourcepub 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 millisecondsourcepub 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 microsecondsourcepub 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 nanosecondsource§impl Time
 
impl Time
sourcepub fn format_into(
    self,
    output: &mut impl Write,
    format: &impl Formattable + ?Sized
) -> Result<usize, Format>
 
pub fn format_into( self, output: &mut impl Write, format: &impl Formattable + ?Sized ) -> Result<usize, Format>
Format the Time using the provided format description.
sourcepub fn format(
    self,
    format: &impl Formattable + ?Sized
) -> Result<String, Format>
 
pub fn format( self, format: &impl Formattable + ?Sized ) -> Result<String, Format>
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");Trait Implementations§
source§impl Add<Duration> for Time
 
impl Add<Duration> for Time
source§fn 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));source§impl AddAssign<Duration> for Time
 
impl AddAssign<Duration> for Time
source§fn add_assign(&mut self, rhs: Duration)
 
fn add_assign(&mut self, rhs: Duration)
+= operation. Read moresource§impl AddAssign<Duration> for Time
 
impl AddAssign<Duration> for Time
source§fn add_assign(&mut self, rhs: StdDuration)
 
fn add_assign(&mut self, rhs: StdDuration)
+= operation. Read moresource§impl Ord for Time
 
impl Ord for Time
source§impl PartialEq<Time> for Time
 
impl PartialEq<Time> for Time
source§impl PartialOrd<Time> for Time
 
impl PartialOrd<Time> for Time
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
 
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read moresource§impl Sub<Duration> for Time
 
impl Sub<Duration> for Time
source§fn 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));source§impl Sub<Time> for Time
 
impl Sub<Time> for Time
source§fn sub(self, rhs: Self) -> Self::Output
 
fn sub(self, rhs: Self) -> Self::Output
Subtract two Times, returning the Duration between. This assumes both Times 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());source§impl SubAssign<Duration> for Time
 
impl SubAssign<Duration> for Time
source§fn sub_assign(&mut self, rhs: StdDuration)
 
fn sub_assign(&mut self, rhs: StdDuration)
-= operation. Read moresource§impl SubAssign<Duration> for Time
 
impl SubAssign<Duration> for Time
source§fn sub_assign(&mut self, rhs: Duration)
 
fn sub_assign(&mut self, rhs: Duration)
-= operation. Read more