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§
§impl Time
impl Time
pub const MIDNIGHT: Time = Self::__from_hms_nanos_unchecked(0, 0, 0, 0)
pub const MIDNIGHT: Time = Self::__from_hms_nanos_unchecked(0, 0, 0, 0)
Create a Time
that is exactly midnight.
assert_eq!(Time::MIDNIGHT, time!(0:00));
pub const fn from_hms(
hour: u8,
minute: u8,
second: u8
) -> Result<Time, ComponentRange>
pub const fn from_hms( hour: u8, minute: u8, second: u8 ) -> Result<Time, 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.
pub const fn from_hms_milli(
hour: u8,
minute: u8,
second: u8,
millisecond: u16
) -> Result<Time, ComponentRange>
pub const fn from_hms_milli( hour: u8, minute: u8, second: u8, millisecond: u16 ) -> Result<Time, 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.
pub const fn from_hms_micro(
hour: u8,
minute: u8,
second: u8,
microsecond: u32
) -> Result<Time, ComponentRange>
pub const fn from_hms_micro( hour: u8, minute: u8, second: u8, microsecond: u32 ) -> Result<Time, 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.
pub const fn from_hms_nano(
hour: u8,
minute: u8,
second: u8,
nanosecond: u32
) -> Result<Time, ComponentRange>
pub const fn from_hms_nano( hour: u8, minute: u8, second: u8, nanosecond: u32 ) -> Result<Time, 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.
pub 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));
pub 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));
pub 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)
);
pub 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)
);
pub 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);
pub 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);
pub 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);
pub 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);
pub 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);
pub 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);
pub const fn replace_hour(self, hour: u8) -> Result<Time, ComponentRange>
pub const fn replace_hour(self, hour: u8) -> Result<Time, 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
pub const fn replace_minute(self, minute: u8) -> Result<Time, ComponentRange>
pub const fn replace_minute(self, minute: u8) -> Result<Time, 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
pub const fn replace_second(self, second: u8) -> Result<Time, ComponentRange>
pub const fn replace_second(self, second: u8) -> Result<Time, 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
pub const fn replace_millisecond(
self,
millisecond: u16
) -> Result<Time, ComponentRange>
pub const fn replace_millisecond( self, millisecond: u16 ) -> Result<Time, 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
pub const fn replace_microsecond(
self,
microsecond: u32
) -> Result<Time, ComponentRange>
pub const fn replace_microsecond( self, microsecond: u32 ) -> Result<Time, 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
pub const fn replace_nanosecond(
self,
nanosecond: u32
) -> Result<Time, ComponentRange>
pub const fn replace_nanosecond( self, nanosecond: u32 ) -> Result<Time, 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
§impl Time
impl Time
pub fn format_into(
self,
output: &mut impl Write,
format: &impl Formattable
) -> Result<usize, Format>
pub fn format_into( self, output: &mut impl Write, format: &impl Formattable ) -> Result<usize, Format>
Format the Time
using the provided format description.
pub fn format(self, format: &impl Formattable) -> Result<String, Format>
pub fn format(self, format: &impl Formattable) -> 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§
§impl Add<Duration> for Time
impl Add<Duration> for Time
§impl Add<Duration> for Time
impl Add<Duration> for Time
§impl AddAssign<Duration> for Time
impl AddAssign<Duration> for Time
§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read more§impl AddAssign<Duration> for Time
impl AddAssign<Duration> for Time
§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moresource§impl Encode<'_, MySql> for Time
impl Encode<'_, MySql> for Time
fn size_hint(&self) -> usize
source§fn encode(self, buf: &mut <DB as HasArguments<'q>>::ArgumentBuffer) -> IsNullwhere
Self: Sized,
fn encode(self, buf: &mut <DB as HasArguments<'q>>::ArgumentBuffer) -> IsNullwhere Self: Sized,
self
into buf
in the expected format for the database.fn produces(&self) -> Option<<DB as Database>::TypeInfo>
source§impl Encode<'_, Postgres> for Time
impl Encode<'_, Postgres> for Time
source§fn encode_by_ref(&self, buf: &mut PgArgumentBuffer) -> IsNull
fn encode_by_ref(&self, buf: &mut PgArgumentBuffer) -> IsNull
fn size_hint(&self) -> usize
source§fn encode(self, buf: &mut <DB as HasArguments<'q>>::ArgumentBuffer) -> IsNullwhere
Self: Sized,
fn encode(self, buf: &mut <DB as HasArguments<'q>>::ArgumentBuffer) -> IsNullwhere Self: Sized,
self
into buf
in the expected format for the database.fn produces(&self) -> Option<<DB as Database>::TypeInfo>
source§impl Encode<'_, Sqlite> for Time
impl Encode<'_, Sqlite> for Time
source§fn encode_by_ref(
&self,
buf: &mut Vec<SqliteArgumentValue<'_>, Global>
) -> IsNull
fn encode_by_ref( &self, buf: &mut Vec<SqliteArgumentValue<'_>, Global> ) -> IsNull
source§fn encode(self, buf: &mut <DB as HasArguments<'q>>::ArgumentBuffer) -> IsNullwhere
Self: Sized,
fn encode(self, buf: &mut <DB as HasArguments<'q>>::ArgumentBuffer) -> IsNullwhere Self: Sized,
self
into buf
in the expected format for the database.fn produces(&self) -> Option<<DB as Database>::TypeInfo>
fn size_hint(&self) -> usize
§impl Ord for Time
impl Ord for Time
§impl PartialOrd<Time> for Time
impl PartialOrd<Time> for Time
§fn partial_cmp(&self, other: &Time) -> Option<Ordering>
fn partial_cmp(&self, other: &Time) -> Option<Ordering>
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 PgHasArrayType for Time
impl PgHasArrayType for Time
fn array_type_info() -> PgTypeInfo
fn array_compatible(ty: &PgTypeInfo) -> bool
§impl Sub<Duration> for Time
impl Sub<Duration> for Time
§impl Sub<Duration> for Time
impl Sub<Duration> for Time
§impl Sub<Time> for Time
impl Sub<Time> for Time
§fn sub(self, rhs: Time) -> <Time as Sub<Time>>::Output
fn sub(self, rhs: Time) -> <Time as Sub<Time>>::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());
§impl SubAssign<Duration> for Time
impl SubAssign<Duration> for Time
§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read more§impl SubAssign<Duration> for Time
impl SubAssign<Duration> for Time
§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moresource§impl Type<Sqlite> for Time
impl Type<Sqlite> for Time
source§fn type_info() -> SqliteTypeInfo
fn type_info() -> SqliteTypeInfo
source§fn compatible(ty: &SqliteTypeInfo) -> bool
fn compatible(ty: &SqliteTypeInfo) -> bool
impl Copy for Time
impl Eq for Time
impl StructuralEq for Time
impl StructuralPartialEq for Time
Auto Trait Implementations§
impl RefUnwindSafe for Time
impl Send for Time
impl Sync for Time
impl Unpin for Time
impl UnwindSafe for Time
Blanket Implementations§
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.