pub struct Time {
hour: u8,
minute: u8,
second: u8,
nanosecond: u32,
padding: Padding,
}
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.
Fields§
§hour: u8
§minute: u8
§second: u8
§nanosecond: u32
§padding: Padding
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));
Runsourcepub(crate) const MAX: Self = _
pub(crate) const MAX: Self = _
The largest value that can be represented by Time
.
23:59:59.999_999_999
sourcepub const fn __from_hms_nanos_unchecked(
hour: u8,
minute: u8,
second: u8,
nanosecond: u32
) -> Self
pub const fn __from_hms_nanos_unchecked( hour: u8, minute: u8, second: u8, nanosecond: u32 ) -> Self
Create a Time
from its components.
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());
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(crate) const fn adjusting_add(
self,
duration: Duration
) -> (DateAdjustment, Self)
pub(crate) const fn adjusting_add( self, duration: Duration ) -> (DateAdjustment, Self)
Add the sub-day time of the Duration
to the Time
. Wraps on overflow, returning whether
the date is different.
sourcepub(crate) const fn adjusting_sub(
self,
duration: Duration
) -> (DateAdjustment, Self)
pub(crate) const fn adjusting_sub( self, duration: Duration ) -> (DateAdjustment, Self)
Subtract the sub-day time of the Duration
to the Time
. Wraps on overflow, returning
whether the date is different.
sourcepub(crate) const fn adjusting_add_std(
self,
duration: StdDuration
) -> (bool, Self)
pub(crate) const fn adjusting_add_std( self, duration: StdDuration ) -> (bool, Self)
Add the sub-day time of the std::time::Duration
to the Time
. Wraps on overflow,
returning whether the date is the previous date as the first element of the tuple.
sourcepub(crate) const fn adjusting_sub_std(
self,
duration: StdDuration
) -> (bool, Self)
pub(crate) const fn adjusting_sub_std( self, duration: StdDuration ) -> (bool, Self)
Subtract the sub-day time of the std::time::Duration
to the Time
. Wraps on overflow,
returning whether the date is the previous date as the first element of the tuple.
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 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
Runsource§impl 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");
Runsource§impl 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!("[hour]:[minute]:[second]");
assert_eq!(Time::parse("12:00:00", &format)?, time!(12:00));
RunTrait 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));
Runsource§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<'a> Deserialize<'a> for Time
Available on crate feature serde
only.
impl<'a> Deserialize<'a> for Time
serde
only.source§fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
source§fn deserialize_in_place<D>(
deserializer: D,
place: &mut Self
) -> Result<(), <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize_in_place<D>( deserializer: D, place: &mut Self ) -> Result<(), <D as Deserializer<'de>>::Error>where D: Deserializer<'de>,
self
from the given Deserializer. Read moresource§impl Distribution<Time> for Standard
Available on crate feature rand
only.
impl Distribution<Time> for Standard
rand
only.source§fn 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.source§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));
Runsource§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 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());
Runsource§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 moresource§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 more