Struct UtcDateTime
pub struct UtcDateTime { /* private fields */ }
Expand description
A [PrimitiveDateTime
] that is known to be UTC.
UtcDateTime
is guaranteed to be ABI-compatible with [PrimitiveDateTime
], meaning that
transmuting from one to the other will not result in undefined behavior.
Implementations§
§impl UtcDateTime
impl UtcDateTime
pub const UNIX_EPOCH: UtcDateTime
pub const UNIX_EPOCH: UtcDateTime
Midnight, 1 January, 1970.
assert_eq!(UtcDateTime::UNIX_EPOCH, utc_datetime!(1970-01-01 0:00));
pub const MIN: UtcDateTime
pub const MIN: UtcDateTime
The smallest value that can be represented by UtcDateTime
.
Depending on large-dates
feature flag, value of this constant may vary.
- With
large-dates
disabled it is equal to-9999-01-01 00:00:00.0
- With
large-dates
enabled it is equal to-999999-01-01 00:00:00.0
// Assuming `large-dates` feature is disabled.
assert_eq!(UtcDateTime::MIN, utc_datetime!(-9999-01-01 0:00));
pub const MAX: UtcDateTime
pub const MAX: UtcDateTime
The largest value that can be represented by UtcDateTime
.
Depending on large-dates
feature flag, value of this constant may vary.
- With
large-dates
disabled it is equal to9999-12-31 23:59:59.999_999_999
- With
large-dates
enabled it is equal to999999-12-31 23:59:59.999_999_999
// Assuming `large-dates` feature is disabled.
assert_eq!(UtcDateTime::MAX, utc_datetime!(+9999-12-31 23:59:59.999_999_999));
pub fn now() -> UtcDateTime
pub fn now() -> UtcDateTime
Create a new UtcDateTime
with the current date and time.
assert!(UtcDateTime::now().year() >= 2019);
pub const fn new(date: Date, time: Time) -> UtcDateTime
pub const fn new(date: Date, time: Time) -> UtcDateTime
Create a new UtcDateTime
from the provided [Date
] and [Time
].
assert_eq!(
UtcDateTime::new(date!(2019-01-01), time!(0:00)),
utc_datetime!(2019-01-01 0:00),
);
pub const fn from_unix_timestamp(
timestamp: i64,
) -> Result<UtcDateTime, ComponentRange>
pub const fn from_unix_timestamp( timestamp: i64, ) -> Result<UtcDateTime, ComponentRange>
Create a UtcDateTime
from the provided Unix timestamp.
assert_eq!(
UtcDateTime::from_unix_timestamp(0),
Ok(UtcDateTime::UNIX_EPOCH),
);
assert_eq!(
UtcDateTime::from_unix_timestamp(1_546_300_800),
Ok(utc_datetime!(2019-01-01 0:00)),
);
If you have a timestamp-nanosecond pair, you can use something along the lines of the following:
let (timestamp, nanos) = (1, 500_000_000);
assert_eq!(
UtcDateTime::from_unix_timestamp(timestamp)? + Duration::nanoseconds(nanos),
UtcDateTime::UNIX_EPOCH + 1.5.seconds()
);
pub const fn from_unix_timestamp_nanos(
timestamp: i128,
) -> Result<UtcDateTime, ComponentRange>
pub const fn from_unix_timestamp_nanos( timestamp: i128, ) -> Result<UtcDateTime, ComponentRange>
Construct an UtcDateTime
from the provided Unix timestamp (in nanoseconds).
assert_eq!(
UtcDateTime::from_unix_timestamp_nanos(0),
Ok(UtcDateTime::UNIX_EPOCH),
);
assert_eq!(
UtcDateTime::from_unix_timestamp_nanos(1_546_300_800_000_000_000),
Ok(utc_datetime!(2019-01-01 0:00)),
);
pub const fn to_offset(self, offset: UtcOffset) -> OffsetDateTime
pub const fn to_offset(self, offset: UtcOffset) -> OffsetDateTime
Convert the UtcDateTime
from UTC to the provided [UtcOffset
], returning an
[OffsetDateTime
].
assert_eq!(
utc_datetime!(2000-01-01 0:00)
.to_offset(offset!(-1))
.year(),
1999,
);
// Construct midnight on new year's, UTC.
let utc = utc_datetime!(2000-01-01 0:00);
let new_york = utc.to_offset(offset!(-5));
let los_angeles = utc.to_offset(offset!(-8));
assert_eq!(utc.hour(), 0);
assert_eq!(new_york.hour(), 19);
assert_eq!(los_angeles.hour(), 16);
§Panics
This method panics if the local date-time in the new offset is outside the supported range.
pub const fn checked_to_offset(
self,
offset: UtcOffset,
) -> Option<OffsetDateTime>
pub const fn checked_to_offset( self, offset: UtcOffset, ) -> Option<OffsetDateTime>
Convert the UtcDateTime
from UTC to the provided [UtcOffset
], returning an
[OffsetDateTime
]. None
is returned if the date-time in the resulting offset is
invalid.
assert_eq!(
utc_datetime!(2000-01-01 0:00)
.checked_to_offset(offset!(-1))
.unwrap()
.year(),
1999,
);
assert_eq!(
UtcDateTime::MAX.checked_to_offset(offset!(+1)),
None,
);
pub const fn unix_timestamp(self) -> i64
pub const fn unix_timestamp(self) -> i64
Get the Unix timestamp.
assert_eq!(utc_datetime!(1970-01-01 0:00).unix_timestamp(), 0);
assert_eq!(utc_datetime!(1970-01-01 1:00).unix_timestamp(), 3_600);
pub const fn unix_timestamp_nanos(self) -> i128
pub const fn unix_timestamp_nanos(self) -> i128
Get the Unix timestamp in nanoseconds.
use time_macros::utc_datetime;
assert_eq!(utc_datetime!(1970-01-01 0:00).unix_timestamp_nanos(), 0);
assert_eq!(
utc_datetime!(1970-01-01 1:00).unix_timestamp_nanos(),
3_600_000_000_000,
);
pub const fn date(self) -> Date
pub const fn date(self) -> Date
Get the [Date
] component of the UtcDateTime
.
assert_eq!(utc_datetime!(2019-01-01 0:00).date(), date!(2019-01-01));
pub const fn time(self) -> Time
pub const fn time(self) -> Time
Get the [Time
] component of the UtcDateTime
.
assert_eq!(utc_datetime!(2019-01-01 0:00).time(), time!(0:00));
pub const fn year(self) -> i32
pub const fn year(self) -> i32
Get the year of the date.
assert_eq!(utc_datetime!(2019-01-01 0:00).year(), 2019);
assert_eq!(utc_datetime!(2019-12-31 0:00).year(), 2019);
assert_eq!(utc_datetime!(2020-01-01 0:00).year(), 2020);
pub const fn month(self) -> Month
pub const fn month(self) -> Month
Get the month of the date.
assert_eq!(utc_datetime!(2019-01-01 0:00).month(), Month::January);
assert_eq!(utc_datetime!(2019-12-31 0:00).month(), Month::December);
pub const fn day(self) -> u8
pub const fn day(self) -> u8
Get the day of the date.
The returned value will always be in the range 1..=31
.
assert_eq!(utc_datetime!(2019-01-01 0:00).day(), 1);
assert_eq!(utc_datetime!(2019-12-31 0:00).day(), 31);
pub const fn ordinal(self) -> u16
pub const fn ordinal(self) -> u16
Get the day of the year.
The returned value will always be in the range 1..=366
(1..=365
for common years).
assert_eq!(utc_datetime!(2019-01-01 0:00).ordinal(), 1);
assert_eq!(utc_datetime!(2019-12-31 0:00).ordinal(), 365);
pub const fn iso_week(self) -> u8
pub const fn iso_week(self) -> u8
Get the ISO week number.
The returned value will always be in the range 1..=53
.
assert_eq!(utc_datetime!(2019-01-01 0:00).iso_week(), 1);
assert_eq!(utc_datetime!(2019-10-04 0:00).iso_week(), 40);
assert_eq!(utc_datetime!(2020-01-01 0:00).iso_week(), 1);
assert_eq!(utc_datetime!(2020-12-31 0:00).iso_week(), 53);
assert_eq!(utc_datetime!(2021-01-01 0:00).iso_week(), 53);
pub const fn sunday_based_week(self) -> u8
pub const fn sunday_based_week(self) -> u8
Get the week number where week 1 begins on the first Sunday.
The returned value will always be in the range 0..=53
.
assert_eq!(utc_datetime!(2019-01-01 0:00).sunday_based_week(), 0);
assert_eq!(utc_datetime!(2020-01-01 0:00).sunday_based_week(), 0);
assert_eq!(utc_datetime!(2020-12-31 0:00).sunday_based_week(), 52);
assert_eq!(utc_datetime!(2021-01-01 0:00).sunday_based_week(), 0);
pub const fn monday_based_week(self) -> u8
pub const fn monday_based_week(self) -> u8
Get the week number where week 1 begins on the first Monday.
The returned value will always be in the range 0..=53
.
assert_eq!(utc_datetime!(2019-01-01 0:00).monday_based_week(), 0);
assert_eq!(utc_datetime!(2020-01-01 0:00).monday_based_week(), 0);
assert_eq!(utc_datetime!(2020-12-31 0:00).monday_based_week(), 52);
assert_eq!(utc_datetime!(2021-01-01 0:00).monday_based_week(), 0);
pub const fn to_calendar_date(self) -> (i32, Month, u8)
pub const fn to_calendar_date(self) -> (i32, Month, u8)
Get the year, month, and day.
assert_eq!(
utc_datetime!(2019-01-01 0:00).to_calendar_date(),
(2019, Month::January, 1)
);
pub const fn to_ordinal_date(self) -> (i32, u16)
pub const fn to_ordinal_date(self) -> (i32, u16)
Get the year and ordinal day number.
assert_eq!(utc_datetime!(2019-01-01 0:00).to_ordinal_date(), (2019, 1));
pub const fn to_iso_week_date(self) -> (i32, u8, Weekday)
pub const fn to_iso_week_date(self) -> (i32, u8, Weekday)
Get the ISO 8601 year, week number, and weekday.
assert_eq!(
utc_datetime!(2019-01-01 0:00).to_iso_week_date(),
(2019, 1, Tuesday)
);
assert_eq!(
utc_datetime!(2019-10-04 0:00).to_iso_week_date(),
(2019, 40, Friday)
);
assert_eq!(
utc_datetime!(2020-01-01 0:00).to_iso_week_date(),
(2020, 1, Wednesday)
);
assert_eq!(
utc_datetime!(2020-12-31 0:00).to_iso_week_date(),
(2020, 53, Thursday)
);
assert_eq!(
utc_datetime!(2021-01-01 0:00).to_iso_week_date(),
(2020, 53, Friday)
);
pub const fn weekday(self) -> Weekday
pub const fn weekday(self) -> Weekday
Get the weekday.
assert_eq!(utc_datetime!(2019-01-01 0:00).weekday(), Tuesday);
assert_eq!(utc_datetime!(2019-02-01 0:00).weekday(), Friday);
assert_eq!(utc_datetime!(2019-03-01 0:00).weekday(), Friday);
assert_eq!(utc_datetime!(2019-04-01 0:00).weekday(), Monday);
assert_eq!(utc_datetime!(2019-05-01 0:00).weekday(), Wednesday);
assert_eq!(utc_datetime!(2019-06-01 0:00).weekday(), Saturday);
assert_eq!(utc_datetime!(2019-07-01 0:00).weekday(), Monday);
assert_eq!(utc_datetime!(2019-08-01 0:00).weekday(), Thursday);
assert_eq!(utc_datetime!(2019-09-01 0:00).weekday(), Sunday);
assert_eq!(utc_datetime!(2019-10-01 0:00).weekday(), Tuesday);
assert_eq!(utc_datetime!(2019-11-01 0:00).weekday(), Friday);
assert_eq!(utc_datetime!(2019-12-01 0:00).weekday(), Sunday);
pub const fn to_julian_day(self) -> i32
pub const fn to_julian_day(self) -> i32
Get the Julian day for the date. The time is not taken into account for this calculation.
The algorithm to perform this conversion is derived from one provided by Peter Baum; it is freely available here.
assert_eq!(utc_datetime!(-4713-11-24 0:00).to_julian_day(), 0);
assert_eq!(utc_datetime!(2000-01-01 0:00).to_julian_day(), 2_451_545);
assert_eq!(utc_datetime!(2019-01-01 0:00).to_julian_day(), 2_458_485);
assert_eq!(utc_datetime!(2019-12-31 0:00).to_julian_day(), 2_458_849);
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!(utc_datetime!(2020-01-01 0:00:00).as_hms(), (0, 0, 0));
assert_eq!(utc_datetime!(2020-01-01 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!(utc_datetime!(2020-01-01 0:00:00).as_hms_milli(), (0, 0, 0, 0));
assert_eq!(
utc_datetime!(2020-01-01 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!(utc_datetime!(2020-01-01 0:00:00).as_hms_micro(), (0, 0, 0, 0));
assert_eq!(
utc_datetime!(2020-01-01 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!(utc_datetime!(2020-01-01 0:00:00).as_hms_nano(), (0, 0, 0, 0));
assert_eq!(
utc_datetime!(2020-01-01 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!(utc_datetime!(2019-01-01 0:00).hour(), 0);
assert_eq!(utc_datetime!(2019-01-01 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!(utc_datetime!(2019-01-01 0:00).minute(), 0);
assert_eq!(utc_datetime!(2019-01-01 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!(utc_datetime!(2019-01-01 0:00).second(), 0);
assert_eq!(utc_datetime!(2019-01-01 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!(utc_datetime!(2019-01-01 0:00).millisecond(), 0);
assert_eq!(utc_datetime!(2019-01-01 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!(utc_datetime!(2019-01-01 0:00).microsecond(), 0);
assert_eq!(
utc_datetime!(2019-01-01 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!(utc_datetime!(2019-01-01 0:00).nanosecond(), 0);
assert_eq!(
utc_datetime!(2019-01-01 23:59:59.999_999_999).nanosecond(),
999_999_999,
);
pub const fn checked_add(self, duration: Duration) -> Option<UtcDateTime>
pub const fn checked_add(self, duration: Duration) -> Option<UtcDateTime>
Computes self + duration
, returning None
if an overflow occurred.
assert_eq!(UtcDateTime::MIN.checked_add((-2).days()), None);
assert_eq!(UtcDateTime::MAX.checked_add(1.days()), None);
assert_eq!(
utc_datetime!(2019 - 11 - 25 15:30).checked_add(27.hours()),
Some(utc_datetime!(2019 - 11 - 26 18:30))
);
pub const fn checked_sub(self, duration: Duration) -> Option<UtcDateTime>
pub const fn checked_sub(self, duration: Duration) -> Option<UtcDateTime>
Computes self - duration
, returning None
if an overflow occurred.
assert_eq!(UtcDateTime::MIN.checked_sub(2.days()), None);
assert_eq!(UtcDateTime::MAX.checked_sub((-1).days()), None);
assert_eq!(
utc_datetime!(2019 - 11 - 25 15:30).checked_sub(27.hours()),
Some(utc_datetime!(2019 - 11 - 24 12:30))
);
pub const fn saturating_add(self, duration: Duration) -> UtcDateTime
pub const fn saturating_add(self, duration: Duration) -> UtcDateTime
Computes self + duration
, saturating value on overflow.
assert_eq!(
UtcDateTime::MIN.saturating_add((-2).days()),
UtcDateTime::MIN
);
assert_eq!(
UtcDateTime::MAX.saturating_add(2.days()),
UtcDateTime::MAX
);
assert_eq!(
utc_datetime!(2019 - 11 - 25 15:30).saturating_add(27.hours()),
utc_datetime!(2019 - 11 - 26 18:30)
);
pub const fn saturating_sub(self, duration: Duration) -> UtcDateTime
pub const fn saturating_sub(self, duration: Duration) -> UtcDateTime
Computes self - duration
, saturating value on overflow.
assert_eq!(
UtcDateTime::MIN.saturating_sub(2.days()),
UtcDateTime::MIN
);
assert_eq!(
UtcDateTime::MAX.saturating_sub((-2).days()),
UtcDateTime::MAX
);
assert_eq!(
utc_datetime!(2019 - 11 - 25 15:30).saturating_sub(27.hours()),
utc_datetime!(2019 - 11 - 24 12:30)
);
§impl UtcDateTime
Methods that replace part of the UtcDateTime
.
impl UtcDateTime
Methods that replace part of the UtcDateTime
.
pub const fn replace_time(self, time: Time) -> UtcDateTime
pub const fn replace_time(self, time: Time) -> UtcDateTime
Replace the time, preserving the date.
assert_eq!(
utc_datetime!(2020-01-01 17:00).replace_time(time!(5:00)),
utc_datetime!(2020-01-01 5:00)
);
pub const fn replace_date(self, date: Date) -> UtcDateTime
pub const fn replace_date(self, date: Date) -> UtcDateTime
Replace the date, preserving the time.
assert_eq!(
utc_datetime!(2020-01-01 12:00).replace_date(date!(2020-01-30)),
utc_datetime!(2020-01-30 12:00)
);
pub const fn replace_year(
self,
year: i32,
) -> Result<UtcDateTime, ComponentRange>
pub const fn replace_year( self, year: i32, ) -> Result<UtcDateTime, ComponentRange>
Replace the year. The month and day will be unchanged.
assert_eq!(
utc_datetime!(2022 - 02 - 18 12:00).replace_year(2019),
Ok(utc_datetime!(2019 - 02 - 18 12:00))
);
assert!(utc_datetime!(2022 - 02 - 18 12:00).replace_year(-1_000_000_000).is_err()); // -1_000_000_000 isn't a valid year
assert!(utc_datetime!(2022 - 02 - 18 12:00).replace_year(1_000_000_000).is_err()); // 1_000_000_000 isn't a valid year
pub const fn replace_month(
self,
month: Month,
) -> Result<UtcDateTime, ComponentRange>
pub const fn replace_month( self, month: Month, ) -> Result<UtcDateTime, ComponentRange>
Replace the month of the year.
assert_eq!(
utc_datetime!(2022 - 02 - 18 12:00).replace_month(Month::January),
Ok(utc_datetime!(2022 - 01 - 18 12:00))
);
assert!(utc_datetime!(2022 - 01 - 30 12:00).replace_month(Month::February).is_err()); // 30 isn't a valid day in February
pub const fn replace_day(self, day: u8) -> Result<UtcDateTime, ComponentRange>
pub const fn replace_day(self, day: u8) -> Result<UtcDateTime, ComponentRange>
Replace the day of the month.
assert_eq!(
utc_datetime!(2022 - 02 - 18 12:00).replace_day(1),
Ok(utc_datetime!(2022 - 02 - 01 12:00))
);
assert!(utc_datetime!(2022 - 02 - 18 12:00).replace_day(0).is_err()); // 00 isn't a valid day
assert!(utc_datetime!(2022 - 02 - 18 12:00).replace_day(30).is_err()); // 30 isn't a valid day in February
pub const fn replace_ordinal(
self,
ordinal: u16,
) -> Result<UtcDateTime, ComponentRange>
pub const fn replace_ordinal( self, ordinal: u16, ) -> Result<UtcDateTime, ComponentRange>
Replace the day of the year.
assert_eq!(utc_datetime!(2022-049 12:00).replace_ordinal(1), Ok(utc_datetime!(2022-001 12:00)));
assert!(utc_datetime!(2022-049 12:00).replace_ordinal(0).is_err()); // 0 isn't a valid ordinal
assert!(utc_datetime!(2022-049 12:00).replace_ordinal(366).is_err()); // 2022 isn't a leap year
pub const fn replace_hour(self, hour: u8) -> Result<UtcDateTime, ComponentRange>
pub const fn replace_hour(self, hour: u8) -> Result<UtcDateTime, ComponentRange>
Replace the clock hour.
assert_eq!(
utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_hour(7),
Ok(utc_datetime!(2022 - 02 - 18 07:02:03.004_005_006))
);
assert!(utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_hour(24).is_err()); // 24 isn't a valid hour
pub const fn replace_minute(
self,
sunday_based_week: u8,
) -> Result<UtcDateTime, ComponentRange>
pub const fn replace_minute( self, sunday_based_week: u8, ) -> Result<UtcDateTime, ComponentRange>
Replace the minutes within the hour.
assert_eq!(
utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_minute(7),
Ok(utc_datetime!(2022 - 02 - 18 01:07:03.004_005_006))
);
assert!(utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_minute(60).is_err()); // 60 isn't a valid minute
pub const fn replace_second(
self,
monday_based_week: u8,
) -> Result<UtcDateTime, ComponentRange>
pub const fn replace_second( self, monday_based_week: u8, ) -> Result<UtcDateTime, ComponentRange>
Replace the seconds within the minute.
assert_eq!(
utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_second(7),
Ok(utc_datetime!(2022 - 02 - 18 01:02:07.004_005_006))
);
assert!(utc_datetime!(2022 - 02 - 18 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<UtcDateTime, ComponentRange>
pub const fn replace_millisecond( self, millisecond: u16, ) -> Result<UtcDateTime, ComponentRange>
Replace the milliseconds within the second.
assert_eq!(
utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_millisecond(7),
Ok(utc_datetime!(2022 - 02 - 18 01:02:03.007))
);
assert!(utc_datetime!(2022 - 02 - 18 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<UtcDateTime, ComponentRange>
pub const fn replace_microsecond( self, microsecond: u32, ) -> Result<UtcDateTime, ComponentRange>
Replace the microseconds within the second.
assert_eq!(
utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_microsecond(7_008),
Ok(utc_datetime!(2022 - 02 - 18 01:02:03.007_008))
);
assert!(utc_datetime!(2022 - 02 - 18 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<UtcDateTime, ComponentRange>
pub const fn replace_nanosecond( self, nanosecond: u32, ) -> Result<UtcDateTime, ComponentRange>
Replace the nanoseconds within the second.
assert_eq!(
utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_nanosecond(7_008_009),
Ok(utc_datetime!(2022 - 02 - 18 01:02:03.007_008_009))
);
assert!(utc_datetime!(2022 - 02 - 18 01:02:03.004_005_006).replace_nanosecond(1_000_000_000).is_err()); // 1_000_000_000 isn't a valid nanosecond
§impl UtcDateTime
impl UtcDateTime
pub fn format_into(
self,
output: &mut (impl Write + ?Sized),
format: &(impl Formattable + ?Sized),
) -> Result<usize, Format>
pub fn format_into( self, output: &mut (impl Write + ?Sized), format: &(impl Formattable + ?Sized), ) -> Result<usize, Format>
Format the UtcDateTime
using the provided format
description.
pub fn format(
self,
format: &(impl Formattable + ?Sized),
) -> Result<String, Format>
pub fn format( self, format: &(impl Formattable + ?Sized), ) -> Result<String, Format>
Format the UtcDateTime
using the provided format
description.
let format = format_description::parse(
"[year]-[month]-[day] [hour]:[minute]:[second] [offset_hour \
sign:mandatory]:[offset_minute]:[offset_second]",
)?;
assert_eq!(
utc_datetime!(2020-01-02 03:04:05).format(&format)?,
"2020-01-02 03:04:05 +00:00:00"
);
§impl UtcDateTime
impl UtcDateTime
pub fn parse(
input: &str,
description: &(impl Parsable + ?Sized),
) -> Result<UtcDateTime, Parse>
pub fn parse( input: &str, description: &(impl Parsable + ?Sized), ) -> Result<UtcDateTime, Parse>
Parse an UtcDateTime
from the input using the provided format
description. A [UtcOffset
] is permitted, but not required to
be present. If present, the value will be converted to UTC.
let format = format_description!("[year]-[month]-[day] [hour]:[minute]:[second]");
assert_eq!(
UtcDateTime::parse("2020-01-02 03:04:05", &format)?,
utc_datetime!(2020-01-02 03:04:05)
);
Trait Implementations§
§impl Add<Duration> for UtcDateTime
impl Add<Duration> for UtcDateTime
§fn add(self, duration: Duration) -> <UtcDateTime as Add<Duration>>::Output
fn add(self, duration: Duration) -> <UtcDateTime as Add<Duration>>::Output
§Panics
This may panic if an overflow occurs.
§type Output = UtcDateTime
type Output = UtcDateTime
+
operator.§impl Add<Duration> for UtcDateTime
impl Add<Duration> for UtcDateTime
§impl AddAssign<Duration> for UtcDateTime
impl AddAssign<Duration> for UtcDateTime
§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
§Panics
This may panic if an overflow occurs.
§impl AddAssign<Duration> for UtcDateTime
impl AddAssign<Duration> for UtcDateTime
§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
§Panics
This may panic if an overflow occurs.
§impl Clone for UtcDateTime
impl Clone for UtcDateTime
§fn clone(&self) -> UtcDateTime
fn clone(&self) -> UtcDateTime
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for UtcDateTime
impl Debug for UtcDateTime
§impl Display for UtcDateTime
impl Display for UtcDateTime
§impl From<OffsetDateTime> for UtcDateTime
impl From<OffsetDateTime> for UtcDateTime
§fn from(datetime: OffsetDateTime) -> UtcDateTime
fn from(datetime: OffsetDateTime) -> UtcDateTime
§Panics
This may panic if an overflow occurs.
§impl From<SystemTime> for UtcDateTime
impl From<SystemTime> for UtcDateTime
§fn from(system_time: SystemTime) -> UtcDateTime
fn from(system_time: SystemTime) -> UtcDateTime
§impl From<UtcDateTime> for SystemTime
impl From<UtcDateTime> for SystemTime
§fn from(datetime: UtcDateTime) -> SystemTime
fn from(datetime: UtcDateTime) -> SystemTime
§impl Hash for UtcDateTime
impl Hash for UtcDateTime
§impl Ord for UtcDateTime
impl Ord for UtcDateTime
§impl PartialEq<OffsetDateTime> for UtcDateTime
impl PartialEq<OffsetDateTime> for UtcDateTime
§impl PartialEq<SystemTime> for UtcDateTime
impl PartialEq<SystemTime> for UtcDateTime
§impl PartialEq<UtcDateTime> for SystemTime
impl PartialEq<UtcDateTime> for SystemTime
§impl PartialEq for UtcDateTime
impl PartialEq for UtcDateTime
§impl PartialOrd<OffsetDateTime> for UtcDateTime
impl PartialOrd<OffsetDateTime> for UtcDateTime
§impl PartialOrd<SystemTime> for UtcDateTime
impl PartialOrd<SystemTime> for UtcDateTime
§impl PartialOrd<UtcDateTime> for SystemTime
impl PartialOrd<UtcDateTime> for SystemTime
§impl PartialOrd for UtcDateTime
impl PartialOrd for UtcDateTime
§impl SmartDisplay for UtcDateTime
impl SmartDisplay for UtcDateTime
§fn metadata(&self, _: FormatterOptions) -> Metadata<'_, UtcDateTime>
fn metadata(&self, _: FormatterOptions) -> Metadata<'_, UtcDateTime>
§fn fmt_with_metadata(
&self,
f: &mut Formatter<'_>,
metadata: Metadata<'_, UtcDateTime>,
) -> Result<(), Error>
fn fmt_with_metadata( &self, f: &mut Formatter<'_>, metadata: Metadata<'_, UtcDateTime>, ) -> Result<(), Error>
§impl Sub<Duration> for UtcDateTime
impl Sub<Duration> for UtcDateTime
§fn sub(self, rhs: Duration) -> <UtcDateTime as Sub<Duration>>::Output
fn sub(self, rhs: Duration) -> <UtcDateTime as Sub<Duration>>::Output
§Panics
This may panic if an overflow occurs.
§type Output = UtcDateTime
type Output = UtcDateTime
-
operator.§impl Sub<Duration> for UtcDateTime
impl Sub<Duration> for UtcDateTime
§impl Sub<OffsetDateTime> for UtcDateTime
impl Sub<OffsetDateTime> for UtcDateTime
§impl Sub<SystemTime> for UtcDateTime
impl Sub<SystemTime> for UtcDateTime
§fn sub(self, rhs: SystemTime) -> <UtcDateTime as Sub<SystemTime>>::Output
fn sub(self, rhs: SystemTime) -> <UtcDateTime as Sub<SystemTime>>::Output
§Panics
This may panic if an overflow occurs.
§impl Sub<UtcDateTime> for SystemTime
impl Sub<UtcDateTime> for SystemTime
§fn sub(self, rhs: UtcDateTime) -> <SystemTime as Sub<UtcDateTime>>::Output
fn sub(self, rhs: UtcDateTime) -> <SystemTime as Sub<UtcDateTime>>::Output
§Panics
This may panic if an overflow occurs.
§impl Sub for UtcDateTime
impl Sub for UtcDateTime
§fn sub(self, rhs: UtcDateTime) -> <UtcDateTime as Sub>::Output
fn sub(self, rhs: UtcDateTime) -> <UtcDateTime as Sub>::Output
§Panics
This may panic if an overflow occurs.
§impl SubAssign<Duration> for UtcDateTime
impl SubAssign<Duration> for UtcDateTime
§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
§Panics
This may panic if an overflow occurs.
§impl SubAssign<Duration> for UtcDateTime
impl SubAssign<Duration> for UtcDateTime
§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
§Panics
This may panic if an overflow occurs.
§impl TryFrom<Parsed> for UtcDateTime
impl TryFrom<Parsed> for UtcDateTime
§fn try_from(
parsed: Parsed,
) -> Result<UtcDateTime, <UtcDateTime as TryFrom<Parsed>>::Error>
fn try_from( parsed: Parsed, ) -> Result<UtcDateTime, <UtcDateTime as TryFrom<Parsed>>::Error>
impl Copy for UtcDateTime
impl Eq for UtcDateTime
impl StructuralPartialEq for UtcDateTime
Auto Trait Implementations§
impl Freeze for UtcDateTime
impl RefUnwindSafe for UtcDateTime
impl Send for UtcDateTime
impl Sync for UtcDateTime
impl Unpin for UtcDateTime
impl UnwindSafe for UtcDateTime
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CallHasher for T
impl<T> CallHasher for T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<T> Filterable for T
impl<T> Filterable for T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more