#[repr(C)]pub struct Time {
nanosecond: RangedU32<0, { _ }>,
second: RangedU8<0, { _ }>,
minute: RangedU8<0, { _ }>,
hour: RangedU8<0, { _ }>,
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§
§nanosecond: RangedU32<0, { _ }>
§second: RangedU8<0, { _ }>
§minute: RangedU8<0, { _ }>
§hour: RangedU8<0, { _ }>
§padding: Padding
Implementations§
source§impl Time
impl Time
sourceconst fn as_u64(self) -> u64
const fn as_u64(self) -> u64
Provides an u64 based representation of the correct endianness
This representation can be used to do comparisons equality testing or hashing.
sourcepub const MIDNIGHT: Self = Self::MIN
pub const MIDNIGHT: Self = Self::MIN
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(
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(crate) const fn from_hms_nanos_ranged(
hour: RangedU8<0, { _ }>,
minute: RangedU8<0, { _ }>,
second: RangedU8<0, { _ }>,
nanosecond: RangedU32<0, { _ }>,
) -> Self
pub(crate) const fn from_hms_nanos_ranged( hour: RangedU8<0, { _ }>, minute: RangedU8<0, { _ }>, second: RangedU8<0, { _ }>, nanosecond: RangedU32<0, { _ }>, ) -> Self
Create a Time
from the hour, minute, second, and nanosecond.
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());
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>
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");
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: StdDuration)
fn add_assign(&mut self, rhs: StdDuration)
+=
operation. Read moresource§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<'a> Deserialize<'a> for Time
impl<'a> Deserialize<'a> for Time
source§fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'a>>(deserializer: D) -> Result<Self, D::Error>
source§impl Ord for Time
impl Ord for Time
source§impl PartialEq for Time
impl PartialEq for Time
source§impl PartialOrd for Time
impl PartialOrd 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 SmartDisplay for Time
impl SmartDisplay for Time
§type Metadata = TimeMetadata
type Metadata = TimeMetadata
source§fn metadata(&self, _: FormatterOptions) -> Metadata<'_, Self>
fn metadata(&self, _: FormatterOptions) -> Metadata<'_, Self>
source§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 for Time
impl Sub 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