Struct time::PrimitiveDateTime [−][src]
pub struct PrimitiveDateTime { /* fields omitted */ }
Expand description
Combined date and time.
Implementations
The smallest value that can be represented by PrimitiveDateTime
.
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 enabled.
assert_eq!(PrimitiveDateTime::MIN, datetime!(-999999 - 01 - 01 0:00));
RunThe largest value that can be represented by PrimitiveDateTime
.
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 enabled.
assert_eq!(PrimitiveDateTime::MAX, datetime!(+999999 - 12 - 31 23:59:59.999_999_999));
RunGet the year of the date.
assert_eq!(datetime!(2019-01-01 0:00).year(), 2019);
assert_eq!(datetime!(2019-12-31 0:00).year(), 2019);
assert_eq!(datetime!(2020-01-01 0:00).year(), 2020);
RunGet the month of the date.
assert_eq!(datetime!(2019-01-01 0:00).month(), Month::January);
assert_eq!(datetime!(2019-12-31 0:00).month(), Month::December);
RunGet the day of the date.
The returned value will always be in the range 1..=31
.
assert_eq!(datetime!(2019-01-01 0:00).day(), 1);
assert_eq!(datetime!(2019-12-31 0:00).day(), 31);
RunGet the day of the year.
The returned value will always be in the range 1..=366
(1..=365
for common years).
assert_eq!(datetime!(2019-01-01 0:00).ordinal(), 1);
assert_eq!(datetime!(2019-12-31 0:00).ordinal(), 365);
RunGet the ISO week number.
The returned value will always be in the range 1..=53
.
assert_eq!(datetime!(2019-01-01 0:00).iso_week(), 1);
assert_eq!(datetime!(2019-10-04 0:00).iso_week(), 40);
assert_eq!(datetime!(2020-01-01 0:00).iso_week(), 1);
assert_eq!(datetime!(2020-12-31 0:00).iso_week(), 53);
assert_eq!(datetime!(2021-01-01 0:00).iso_week(), 53);
RunGet the week number where week 1 begins on the first Sunday.
The returned value will always be in the range 0..=53
.
assert_eq!(datetime!(2019-01-01 0:00).sunday_based_week(), 0);
assert_eq!(datetime!(2020-01-01 0:00).sunday_based_week(), 0);
assert_eq!(datetime!(2020-12-31 0:00).sunday_based_week(), 52);
assert_eq!(datetime!(2021-01-01 0:00).sunday_based_week(), 0);
RunGet the week number where week 1 begins on the first Monday.
The returned value will always be in the range 0..=53
.
assert_eq!(datetime!(2019-01-01 0:00).monday_based_week(), 0);
assert_eq!(datetime!(2020-01-01 0:00).monday_based_week(), 0);
assert_eq!(datetime!(2020-12-31 0:00).monday_based_week(), 52);
assert_eq!(datetime!(2021-01-01 0:00).monday_based_week(), 0);
RunGet the year, month, and day.
assert_eq!(
datetime!(2019-01-01 0:00).to_calendar_date(),
(2019, Month::January, 1)
);
RunGet the year and ordinal day number.
assert_eq!(datetime!(2019-01-01 0:00).to_ordinal_date(), (2019, 1));
RunGet the ISO 8601 year, week number, and weekday.
assert_eq!(
datetime!(2019-01-01 0:00).to_iso_week_date(),
(2019, 1, Tuesday)
);
assert_eq!(
datetime!(2019-10-04 0:00).to_iso_week_date(),
(2019, 40, Friday)
);
assert_eq!(
datetime!(2020-01-01 0:00).to_iso_week_date(),
(2020, 1, Wednesday)
);
assert_eq!(
datetime!(2020-12-31 0:00).to_iso_week_date(),
(2020, 53, Thursday)
);
assert_eq!(
datetime!(2021-01-01 0:00).to_iso_week_date(),
(2020, 53, Friday)
);
RunGet the weekday.
assert_eq!(datetime!(2019-01-01 0:00).weekday(), Tuesday);
assert_eq!(datetime!(2019-02-01 0:00).weekday(), Friday);
assert_eq!(datetime!(2019-03-01 0:00).weekday(), Friday);
assert_eq!(datetime!(2019-04-01 0:00).weekday(), Monday);
assert_eq!(datetime!(2019-05-01 0:00).weekday(), Wednesday);
assert_eq!(datetime!(2019-06-01 0:00).weekday(), Saturday);
assert_eq!(datetime!(2019-07-01 0:00).weekday(), Monday);
assert_eq!(datetime!(2019-08-01 0:00).weekday(), Thursday);
assert_eq!(datetime!(2019-09-01 0:00).weekday(), Sunday);
assert_eq!(datetime!(2019-10-01 0:00).weekday(), Tuesday);
assert_eq!(datetime!(2019-11-01 0:00).weekday(), Friday);
assert_eq!(datetime!(2019-12-01 0:00).weekday(), Sunday);
RunGet 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!(datetime!(-4713-11-24 0:00).to_julian_day(), 0);
assert_eq!(datetime!(2000-01-01 0:00).to_julian_day(), 2_451_545);
assert_eq!(datetime!(2019-01-01 0:00).to_julian_day(), 2_458_485);
assert_eq!(datetime!(2019-12-31 0:00).to_julian_day(), 2_458_849);
RunGet the clock hour, minute, and second.
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms(), (0, 0, 0));
assert_eq!(datetime!(2020-01-01 23:59:59).as_hms(), (23, 59, 59));
RunGet the clock hour, minute, second, and millisecond.
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms_milli(), (0, 0, 0, 0));
assert_eq!(
datetime!(2020-01-01 23:59:59.999).as_hms_milli(),
(23, 59, 59, 999)
);
RunGet the clock hour, minute, second, and microsecond.
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms_micro(), (0, 0, 0, 0));
assert_eq!(
datetime!(2020-01-01 23:59:59.999_999).as_hms_micro(),
(23, 59, 59, 999_999)
);
RunGet the clock hour, minute, second, and nanosecond.
assert_eq!(datetime!(2020-01-01 0:00:00).as_hms_nano(), (0, 0, 0, 0));
assert_eq!(
datetime!(2020-01-01 23:59:59.999_999_999).as_hms_nano(),
(23, 59, 59, 999_999_999)
);
RunGet the clock hour.
The returned value will always be in the range 0..24
.
assert_eq!(datetime!(2019-01-01 0:00).hour(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59).hour(), 23);
RunGet the minute within the hour.
The returned value will always be in the range 0..60
.
assert_eq!(datetime!(2019-01-01 0:00).minute(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59).minute(), 59);
RunGet the second within the minute.
The returned value will always be in the range 0..60
.
assert_eq!(datetime!(2019-01-01 0:00).second(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59).second(), 59);
RunGet the milliseconds within the second.
The returned value will always be in the range 0..1_000
.
assert_eq!(datetime!(2019-01-01 0:00).millisecond(), 0);
assert_eq!(datetime!(2019-01-01 23:59:59.999).millisecond(), 999);
RunGet the microseconds within the second.
The returned value will always be in the range 0..1_000_000
.
assert_eq!(datetime!(2019-01-01 0:00).microsecond(), 0);
assert_eq!(
datetime!(2019-01-01 23:59:59.999_999).microsecond(),
999_999
);
RunGet the nanoseconds within the second.
The returned value will always be in the range 0..1_000_000_000
.
assert_eq!(datetime!(2019-01-01 0:00).nanosecond(), 0);
assert_eq!(
datetime!(2019-01-01 23:59:59.999_999_999).nanosecond(),
999_999_999,
);
RunAssuming that the existing PrimitiveDateTime
represents a moment in the provided
UtcOffset
, return an OffsetDateTime
.
assert_eq!(
datetime!(2019-01-01 0:00)
.assume_offset(offset!(UTC))
.unix_timestamp(),
1_546_300_800,
);
assert_eq!(
datetime!(2019-01-01 0:00)
.assume_offset(offset!(-1))
.unix_timestamp(),
1_546_304_400,
);
RunAssuming that the existing PrimitiveDateTime
represents a moment in UTC, return an
OffsetDateTime
.
assert_eq!(
datetime!(2019-01-01 0:00).assume_utc().unix_timestamp(),
1_546_300_800,
);
RunComputes self + duration
, returning None
if an overflow occurred.
let datetime = Date::MIN.midnight();
assert_eq!(datetime.checked_add((-2).days()), None);
let datetime = Date::MAX.midnight();
assert_eq!(datetime.checked_add(1.days()), None);
assert_eq!(
datetime!(2019 - 11 - 25 15:30).checked_add(27.hours()),
Some(datetime!(2019 - 11 - 26 18:30))
);
RunComputes self - duration
, returning None
if an overflow occurred.
let datetime = Date::MIN.midnight();
assert_eq!(datetime.checked_sub(2.days()), None);
let datetime = Date::MAX.midnight();
assert_eq!(datetime.checked_sub((-1).days()), None);
assert_eq!(
datetime!(2019 - 11 - 25 15:30).checked_sub(27.hours()),
Some(datetime!(2019 - 11 - 24 12:30))
);
RunComputes self + duration
, saturating value on overflow.
assert_eq!(
PrimitiveDateTime::MIN.saturating_add((-2).days()),
PrimitiveDateTime::MIN
);
assert_eq!(
PrimitiveDateTime::MAX.saturating_add(2.days()),
PrimitiveDateTime::MAX
);
assert_eq!(
datetime!(2019 - 11 - 25 15:30).saturating_add(27.hours()),
datetime!(2019 - 11 - 26 18:30)
);
RunComputes self - duration
, saturating value on overflow.
assert_eq!(
PrimitiveDateTime::MIN.saturating_sub(2.days()),
PrimitiveDateTime::MIN
);
assert_eq!(
PrimitiveDateTime::MAX.saturating_sub((-2).days()),
PrimitiveDateTime::MAX
);
assert_eq!(
datetime!(2019 - 11 - 25 15:30).saturating_sub(27.hours()),
datetime!(2019 - 11 - 24 12:30)
);
RunMethods that replace part of the PrimitiveDateTime
.
pub 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 PrimitiveDateTime
using the provided format
description.
Format the PrimitiveDateTime
using the provided format
description.
let format = format_description::parse("[year]-[month]-[day] [hour]:[minute]:[second]")?;
assert_eq!(
datetime!(2020-01-02 03:04:05).format(&format)?,
"2020-01-02 03:04:05"
);
RunTrait Implementations
Performs the +=
operation. Read more
Performs the +=
operation. Read more
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Auto Trait Implementations
impl RefUnwindSafe for PrimitiveDateTime
impl Send for PrimitiveDateTime
impl Sync for PrimitiveDateTime
impl Unpin for PrimitiveDateTime
impl UnwindSafe for PrimitiveDateTime
Blanket Implementations
Mutably borrows from an owned value. Read more