pub struct Date {
value: NonZeroI32,
}
Expand description
Date in the proleptic Gregorian calendar.
By default, years between ±9999 inclusive are representable. This can be expanded to ±999,999
inclusive by enabling the large-dates
crate feature. Doing so has performance implications
and introduces some ambiguities when parsing.
Fields§
§value: NonZeroI32
Bitpacked field containing both the year and ordinal.
Implementations§
Source§impl Date
impl Date
Sourcepub const MIN: Self = _
pub const MIN: Self = _
The minimum valid Date
.
The value of this may vary depending on the feature flags enabled.
Sourcepub const MAX: Self = _
pub const MAX: Self = _
The maximum valid Date
.
The value of this may vary depending on the feature flags enabled.
Source#[doc(hidden)] pub const unsafe fn __from_ordinal_date_unchecked(
year: i32,
ordinal: u16,
) -> Self
#[doc(hidden)] pub const unsafe fn __from_ordinal_date_unchecked( year: i32, ordinal: u16, ) -> Self
Construct a Date
from the year and ordinal values, the validity of which must be
guaranteed by the caller.
§Safety
ordinal
must be non-zero and at most the number of days in year
. year
should be in the
range MIN_YEAR..=MAX_YEAR
, but this is not a safety invariant.
Sourcepub const fn from_calendar_date(
year: i32,
month: Month,
day: u8,
) -> Result<Self, ComponentRange>
pub const fn from_calendar_date( year: i32, month: Month, day: u8, ) -> Result<Self, ComponentRange>
Sourcepub const fn from_ordinal_date(
year: i32,
ordinal: u16,
) -> Result<Self, ComponentRange>
pub const fn from_ordinal_date( year: i32, ordinal: u16, ) -> Result<Self, ComponentRange>
Sourcepub const fn from_iso_week_date(
year: i32,
week: u8,
weekday: Weekday,
) -> Result<Self, ComponentRange>
pub const fn from_iso_week_date( year: i32, week: u8, weekday: Weekday, ) -> Result<Self, ComponentRange>
Sourcepub const fn from_julian_day(julian_day: i32) -> Result<Self, ComponentRange>
pub const fn from_julian_day(julian_day: i32) -> Result<Self, ComponentRange>
Create a Date
from the Julian day.
The algorithm to perform this conversion is derived from one provided by Peter Baum; it is freely available here.
Sourcepub(crate) const fn from_julian_day_unchecked(julian_day: i32) -> Self
pub(crate) const fn from_julian_day_unchecked(julian_day: i32) -> Self
Create a Date
from the Julian day.
This does not check the validity of the provided Julian day, and as such may result in an internally invalid value.
Sourcepub(crate) const fn month_day(self) -> (Month, u8)
pub(crate) const fn month_day(self) -> (Month, u8)
Get the month and day. This is more efficient than fetching the components individually.
Sourcepub(crate) const fn iso_year_week(self) -> (i32, u8)
pub(crate) const fn iso_year_week(self) -> (i32, u8)
Get the ISO 8601 year and week number.
Sourcepub 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
.
Sourcepub 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
.
Sourcepub 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
.
Sourcepub const fn to_calendar_date(self) -> (i32, Month, u8)
pub const fn to_calendar_date(self) -> (i32, Month, u8)
Sourcepub const fn to_ordinal_date(self) -> (i32, u16)
pub const fn to_ordinal_date(self) -> (i32, u16)
Sourcepub 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!(date!(2019-01-01).to_iso_week_date(), (2019, 1, Tuesday));
assert_eq!(date!(2019-10-04).to_iso_week_date(), (2019, 40, Friday));
assert_eq!(date!(2020-01-01).to_iso_week_date(), (2020, 1, Wednesday));
assert_eq!(date!(2020-12-31).to_iso_week_date(), (2020, 53, Thursday));
assert_eq!(date!(2021-01-01).to_iso_week_date(), (2020, 53, Friday));
Sourcepub const fn weekday(self) -> Weekday
pub const fn weekday(self) -> Weekday
Get the weekday.
assert_eq!(date!(2019-01-01).weekday(), Tuesday);
assert_eq!(date!(2019-02-01).weekday(), Friday);
assert_eq!(date!(2019-03-01).weekday(), Friday);
assert_eq!(date!(2019-04-01).weekday(), Monday);
assert_eq!(date!(2019-05-01).weekday(), Wednesday);
assert_eq!(date!(2019-06-01).weekday(), Saturday);
assert_eq!(date!(2019-07-01).weekday(), Monday);
assert_eq!(date!(2019-08-01).weekday(), Thursday);
assert_eq!(date!(2019-09-01).weekday(), Sunday);
assert_eq!(date!(2019-10-01).weekday(), Tuesday);
assert_eq!(date!(2019-11-01).weekday(), Friday);
assert_eq!(date!(2019-12-01).weekday(), Sunday);
Sourcepub const fn previous_day(self) -> Option<Self>
pub const fn previous_day(self) -> Option<Self>
Sourcepub const fn next_occurrence(self, weekday: Weekday) -> Self
pub const fn next_occurrence(self, weekday: Weekday) -> Self
Sourcepub const fn prev_occurrence(self, weekday: Weekday) -> Self
pub const fn prev_occurrence(self, weekday: Weekday) -> Self
Sourcepub const fn nth_next_occurrence(self, weekday: Weekday, n: u8) -> Self
pub const fn nth_next_occurrence(self, weekday: Weekday, n: u8) -> Self
Sourcepub const fn nth_prev_occurrence(self, weekday: Weekday, n: u8) -> Self
pub const fn nth_prev_occurrence(self, weekday: Weekday, n: u8) -> Self
Sourcepub const fn to_julian_day(self) -> i32
pub const fn to_julian_day(self) -> i32
Get the Julian day for the date.
The algorithm to perform this conversion is derived from one provided by Peter Baum; it is freely available here.
Sourcepub const fn checked_add(self, duration: Duration) -> Option<Self>
pub const fn checked_add(self, duration: Duration) -> Option<Self>
Computes self + duration
, returning None
if an overflow occurred.
assert_eq!(Date::MAX.checked_add(1.days()), None);
assert_eq!(Date::MIN.checked_add((-2).days()), None);
assert_eq!(
date!(2020-12-31).checked_add(2.days()),
Some(date!(2021-01-02))
);
§Note
This function only takes whole days into account.
Sourcepub const fn checked_add_std(self, duration: StdDuration) -> Option<Self>
pub const fn checked_add_std(self, duration: StdDuration) -> Option<Self>
Computes self + duration
, returning None
if an overflow occurred.
assert_eq!(Date::MAX.checked_add_std(1.std_days()), None);
assert_eq!(
date!(2020-12-31).checked_add_std(2.std_days()),
Some(date!(2021-01-02))
);
§Note
This function only takes whole days into account.
Sourcepub const fn checked_sub(self, duration: Duration) -> Option<Self>
pub const fn checked_sub(self, duration: Duration) -> Option<Self>
Computes self - duration
, returning None
if an overflow occurred.
assert_eq!(Date::MAX.checked_sub((-2).days()), None);
assert_eq!(Date::MIN.checked_sub(1.days()), None);
assert_eq!(
date!(2020-12-31).checked_sub(2.days()),
Some(date!(2020-12-29))
);
§Note
This function only takes whole days into account.
Sourcepub const fn checked_sub_std(self, duration: StdDuration) -> Option<Self>
pub const fn checked_sub_std(self, duration: StdDuration) -> Option<Self>
Computes self - duration
, returning None
if an overflow occurred.
assert_eq!(Date::MIN.checked_sub_std(1.std_days()), None);
assert_eq!(
date!(2020-12-31).checked_sub_std(2.std_days()),
Some(date!(2020-12-29))
);
§Note
This function only takes whole days into account.
Sourcepub(crate) const fn checked_next_occurrence(
self,
weekday: Weekday,
) -> Option<Self>
pub(crate) const fn checked_next_occurrence( self, weekday: Weekday, ) -> Option<Self>
Calculates the first occurrence of a weekday that is strictly later than a given Date
.
Returns None
if an overflow occurred.
Sourcepub(crate) const fn checked_prev_occurrence(
self,
weekday: Weekday,
) -> Option<Self>
pub(crate) const fn checked_prev_occurrence( self, weekday: Weekday, ) -> Option<Self>
Calculates the first occurrence of a weekday that is strictly earlier than a given Date
.
Returns None
if an overflow occurred.
Sourcepub(crate) const fn checked_nth_next_occurrence(
self,
weekday: Weekday,
n: u8,
) -> Option<Self>
pub(crate) const fn checked_nth_next_occurrence( self, weekday: Weekday, n: u8, ) -> Option<Self>
Calculates the n
th occurrence of a weekday that is strictly later than a given Date
.
Returns None
if an overflow occurred or if n == 0
.
Sourcepub(crate) const fn checked_nth_prev_occurrence(
self,
weekday: Weekday,
n: u8,
) -> Option<Self>
pub(crate) const fn checked_nth_prev_occurrence( self, weekday: Weekday, n: u8, ) -> Option<Self>
Calculates the n
th occurrence of a weekday that is strictly earlier than a given Date
.
Returns None
if an overflow occurred or if n == 0
.
Sourcepub const fn saturating_add(self, duration: Duration) -> Self
pub const fn saturating_add(self, duration: Duration) -> Self
Computes self + duration
, saturating value on overflow.
assert_eq!(Date::MAX.saturating_add(1.days()), Date::MAX);
assert_eq!(Date::MIN.saturating_add((-2).days()), Date::MIN);
assert_eq!(
date!(2020-12-31).saturating_add(2.days()),
date!(2021-01-02)
);
§Note
This function only takes whole days into account.
Sourcepub const fn saturating_sub(self, duration: Duration) -> Self
pub const fn saturating_sub(self, duration: Duration) -> Self
Computes self - duration
, saturating value on overflow.
assert_eq!(Date::MAX.saturating_sub((-2).days()), Date::MAX);
assert_eq!(Date::MIN.saturating_sub(1.days()), Date::MIN);
assert_eq!(
date!(2020-12-31).saturating_sub(2.days()),
date!(2020-12-29)
);
§Note
This function only takes whole days into account.
Sourcepub const fn replace_year(self, year: i32) -> Result<Self, ComponentRange>
pub const fn replace_year(self, year: i32) -> Result<Self, ComponentRange>
Replace the year. The month and day will be unchanged.
Sourcepub const fn replace_month(self, month: Month) -> Result<Self, ComponentRange>
pub const fn replace_month(self, month: Month) -> Result<Self, ComponentRange>
Sourcepub const fn replace_day(self, day: u8) -> Result<Self, ComponentRange>
pub const fn replace_day(self, day: u8) -> Result<Self, ComponentRange>
Sourcepub const fn replace_ordinal(self, ordinal: u16) -> Result<Self, ComponentRange>
pub const fn replace_ordinal(self, ordinal: u16) -> Result<Self, ComponentRange>
Source§impl Date
Methods to add a Time
component, resulting in a PrimitiveDateTime
.
impl Date
Methods to add a Time
component, resulting in a PrimitiveDateTime
.
Sourcepub const fn midnight(self) -> PrimitiveDateTime
pub const fn midnight(self) -> PrimitiveDateTime
Create a PrimitiveDateTime
using the existing date. The Time
component will be set
to midnight.
Sourcepub const fn with_time(self, time: Time) -> PrimitiveDateTime
pub const fn with_time(self, time: Time) -> PrimitiveDateTime
Create a PrimitiveDateTime
using the existing date and the provided Time
.
Sourcepub const fn with_hms(
self,
hour: u8,
minute: u8,
second: u8,
) -> Result<PrimitiveDateTime, ComponentRange>
pub const fn with_hms( self, hour: u8, minute: u8, second: u8, ) -> Result<PrimitiveDateTime, ComponentRange>
Attempt to create a PrimitiveDateTime
using the existing date and the provided time.
Sourcepub const fn with_hms_milli(
self,
hour: u8,
minute: u8,
second: u8,
millisecond: u16,
) -> Result<PrimitiveDateTime, ComponentRange>
pub const fn with_hms_milli( self, hour: u8, minute: u8, second: u8, millisecond: u16, ) -> Result<PrimitiveDateTime, ComponentRange>
Attempt to create a PrimitiveDateTime
using the existing date and the provided time.
Sourcepub const fn with_hms_micro(
self,
hour: u8,
minute: u8,
second: u8,
microsecond: u32,
) -> Result<PrimitiveDateTime, ComponentRange>
pub const fn with_hms_micro( self, hour: u8, minute: u8, second: u8, microsecond: u32, ) -> Result<PrimitiveDateTime, ComponentRange>
Attempt to create a PrimitiveDateTime
using the existing date and the provided time.
Sourcepub const fn with_hms_nano(
self,
hour: u8,
minute: u8,
second: u8,
nanosecond: u32,
) -> Result<PrimitiveDateTime, ComponentRange>
pub const fn with_hms_nano( self, hour: u8, minute: u8, second: u8, nanosecond: u32, ) -> Result<PrimitiveDateTime, ComponentRange>
Attempt to create a PrimitiveDateTime
using the existing date and the provided time.
Source§impl Date
impl Date
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 Date
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 Date
using the provided format description.
Trait Implementations§
Source§impl AddAssign<Duration> for Date
impl AddAssign<Duration> for Date
Source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moreSource§impl AddAssign<Duration> for Date
impl AddAssign<Duration> for Date
Source§fn add_assign(&mut self, rhs: StdDuration)
fn add_assign(&mut self, rhs: StdDuration)
+=
operation. Read moreSource§impl<'a> Deserialize<'a> for Date
Available on crate feature serde
only.
impl<'a> Deserialize<'a> for Date
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§#[doc(hidden)] fn deserialize_in_place<D>(
deserializer: D,
place: &mut Self,
) -> Result<(), <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
#[doc(hidden)] 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<Date> for Standard
Available on crate feature rand
only.
impl Distribution<Date> for Standard
rand
only.Source§impl Ord for Date
impl Ord for Date
Source§impl PartialOrd for Date
impl PartialOrd for Date
Source§impl SmartDisplay for Date
impl SmartDisplay for Date
Source§type Metadata = DateMetadata
type Metadata = DateMetadata
Source§fn metadata(&self, _: FormatterOptions) -> Metadata<'_, Self>
fn metadata(&self, _: FormatterOptions) -> Metadata<'_, Self>
Source§impl SubAssign<Duration> for Date
impl SubAssign<Duration> for Date
Source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moreSource§impl SubAssign<Duration> for Date
impl SubAssign<Duration> for Date
Source§fn sub_assign(&mut self, rhs: StdDuration)
fn sub_assign(&mut self, rhs: StdDuration)
-=
operation. Read more