pub struct Date(pub Date);Expand description
An RFC 3339 full-date (YYYY-MM-DD), the wire form of OpenAPI’s format: date.
Tuple Fields§
§0: DateImplementations§
Methods from Deref<Target = Date>§
Sourcepub fn year(self) -> i32
pub fn year(self) -> i32
Get the year of the date.
assert_eq!(date!(2019-01-01).year(), 2019);
assert_eq!(date!(2019-12-31).year(), 2019);
assert_eq!(date!(2020-01-01).year(), 2020);Sourcepub fn month(self) -> Month
pub fn month(self) -> Month
Get the month.
assert_eq!(date!(2019-01-01).month(), Month::January);
assert_eq!(date!(2019-12-31).month(), Month::December);Sourcepub fn day(self) -> u8
pub fn day(self) -> u8
Get the day of the month.
The returned value will always be in the range 1..=31.
assert_eq!(date!(2019-01-01).day(), 1);
assert_eq!(date!(2019-12-31).day(), 31);Sourcepub fn ordinal(self) -> u16
pub 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!(date!(2019-01-01).ordinal(), 1);
assert_eq!(date!(2019-12-31).ordinal(), 365);Sourcepub fn iso_week(self) -> u8
pub fn iso_week(self) -> u8
Get the ISO week number.
The returned value will always be in the range 1..=53.
assert_eq!(date!(2019-01-01).iso_week(), 1);
assert_eq!(date!(2019-10-04).iso_week(), 40);
assert_eq!(date!(2020-01-01).iso_week(), 1);
assert_eq!(date!(2020-12-31).iso_week(), 53);
assert_eq!(date!(2021-01-01).iso_week(), 53);Sourcepub fn sunday_based_week(self) -> u8
pub 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!(date!(2019-01-01).sunday_based_week(), 0);
assert_eq!(date!(2020-01-01).sunday_based_week(), 0);
assert_eq!(date!(2020-12-31).sunday_based_week(), 52);
assert_eq!(date!(2021-01-01).sunday_based_week(), 0);Sourcepub fn monday_based_week(self) -> u8
pub 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!(date!(2019-01-01).monday_based_week(), 0);
assert_eq!(date!(2020-01-01).monday_based_week(), 0);
assert_eq!(date!(2020-12-31).monday_based_week(), 52);
assert_eq!(date!(2021-01-01).monday_based_week(), 0);Sourcepub fn to_calendar_date(self) -> (i32, Month, u8)
pub fn to_calendar_date(self) -> (i32, Month, u8)
Get the year, month, and day.
assert_eq!(
date!(2019-01-01).to_calendar_date(),
(2019, Month::January, 1)
);Sourcepub fn to_ordinal_date(self) -> (i32, u16)
pub fn to_ordinal_date(self) -> (i32, u16)
Get the year and ordinal day number.
assert_eq!(date!(2019-01-01).to_ordinal_date(), (2019, 1));Sourcepub fn to_iso_week_date(self) -> (i32, u8, Weekday)
pub 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 fn weekday(self) -> Weekday
pub 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 fn next_day(self) -> Option<Date>
pub fn next_day(self) -> Option<Date>
Get the next calendar date.
assert_eq!(date!(2019-01-01).next_day(), Some(date!(2019-01-02)));
assert_eq!(date!(2019-01-31).next_day(), Some(date!(2019-02-01)));
assert_eq!(date!(2019-12-31).next_day(), Some(date!(2020-01-01)));
assert_eq!(Date::MAX.next_day(), None);Sourcepub fn previous_day(self) -> Option<Date>
pub fn previous_day(self) -> Option<Date>
Get the previous calendar date.
assert_eq!(date!(2019-01-02).previous_day(), Some(date!(2019-01-01)));
assert_eq!(date!(2019-02-01).previous_day(), Some(date!(2019-01-31)));
assert_eq!(date!(2020-01-01).previous_day(), Some(date!(2019-12-31)));
assert_eq!(Date::MIN.previous_day(), None);Sourcepub fn next_occurrence(self, weekday: Weekday) -> Date
pub fn next_occurrence(self, weekday: Weekday) -> Date
Calculates the first occurrence of a weekday that is strictly later than a given Date.
§Panics
Panics if an overflow occurred.
§Examples
assert_eq!(
date!(2023-06-28).next_occurrence(Weekday::Monday),
date!(2023-07-03)
);
assert_eq!(
date!(2023-06-19).next_occurrence(Weekday::Monday),
date!(2023-06-26)
);Sourcepub fn prev_occurrence(self, weekday: Weekday) -> Date
pub fn prev_occurrence(self, weekday: Weekday) -> Date
Calculates the first occurrence of a weekday that is strictly earlier than a given Date.
§Panics
Panics if an overflow occurred.
§Examples
assert_eq!(
date!(2023-06-28).prev_occurrence(Weekday::Monday),
date!(2023-06-26)
);
assert_eq!(
date!(2023-06-19).prev_occurrence(Weekday::Monday),
date!(2023-06-12)
);Sourcepub fn nth_next_occurrence(self, weekday: Weekday, n: u8) -> Date
pub fn nth_next_occurrence(self, weekday: Weekday, n: u8) -> Date
Calculates the nth occurrence of a weekday that is strictly later than a given Date.
§Panics
Panics if an overflow occurred or if n == 0.
§Examples
assert_eq!(
date!(2023-06-25).nth_next_occurrence(Weekday::Monday, 5),
date!(2023-07-24)
);
assert_eq!(
date!(2023-06-26).nth_next_occurrence(Weekday::Monday, 5),
date!(2023-07-31)
);Sourcepub fn nth_prev_occurrence(self, weekday: Weekday, n: u8) -> Date
pub fn nth_prev_occurrence(self, weekday: Weekday, n: u8) -> Date
Calculates the nth occurrence of a weekday that is strictly earlier than a given Date.
§Panics
Panics if an overflow occurred or if n == 0.
§Examples
assert_eq!(
date!(2023-06-27).nth_prev_occurrence(Weekday::Monday, 3),
date!(2023-06-12)
);
assert_eq!(
date!(2023-06-26).nth_prev_occurrence(Weekday::Monday, 3),
date!(2023-06-05)
);Sourcepub fn iter_to(self, end: Date) -> DateIter ⓘ
pub fn iter_to(self, end: Date) -> DateIter ⓘ
Create an iterator of dates from self to end inclusive.
let mut iter = date!(2019-01-01).iter_to(date!(2019-01-03));
assert_eq!(iter.next(), Some(date!(2019-01-01)));
assert_eq!(iter.next(), Some(date!(2019-01-02)));
assert_eq!(iter.next(), Some(date!(2019-01-03)));
assert_eq!(iter.next(), None);Sourcepub fn to_julian_day(self) -> i32
pub fn to_julian_day(self) -> i32
Get the Julian day for the date.
assert_eq!(date!(-4713-11-24).to_julian_day(), 0);
assert_eq!(date!(2000-01-01).to_julian_day(), 2_451_545);
assert_eq!(date!(2019-01-01).to_julian_day(), 2_458_485);
assert_eq!(date!(2019-12-31).to_julian_day(), 2_458_849);Sourcepub fn checked_add(self, duration: SignedDuration) -> Option<Date>
pub fn checked_add(self, duration: SignedDuration) -> Option<Date>
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.
assert_eq!(Date::MAX.checked_add(23.hours()), Some(Date::MAX));
assert_eq!(Date::MIN.checked_add((-23).hours()), Some(Date::MIN));
assert_eq!(
date!(2020-12-31).checked_add(23.hours()),
Some(date!(2020-12-31))
);
assert_eq!(
date!(2020-12-31).checked_add(47.hours()),
Some(date!(2021-01-01))
);Sourcepub fn checked_add_std(self, duration: Duration) -> Option<Date>
pub fn checked_add_std(self, duration: Duration) -> Option<Date>
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.
assert_eq!(Date::MAX.checked_add_std(23.std_hours()), Some(Date::MAX));
assert_eq!(
date!(2020-12-31).checked_add_std(23.std_hours()),
Some(date!(2020-12-31))
);
assert_eq!(
date!(2020-12-31).checked_add_std(47.std_hours()),
Some(date!(2021-01-01))
);Sourcepub fn checked_sub(self, duration: SignedDuration) -> Option<Date>
pub fn checked_sub(self, duration: SignedDuration) -> Option<Date>
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.
assert_eq!(Date::MAX.checked_sub((-23).hours()), Some(Date::MAX));
assert_eq!(Date::MIN.checked_sub(23.hours()), Some(Date::MIN));
assert_eq!(
date!(2020-12-31).checked_sub(23.hours()),
Some(date!(2020-12-31))
);
assert_eq!(
date!(2020-12-31).checked_sub(47.hours()),
Some(date!(2020-12-30))
);Sourcepub fn checked_sub_std(self, duration: Duration) -> Option<Date>
pub fn checked_sub_std(self, duration: Duration) -> Option<Date>
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.
assert_eq!(Date::MIN.checked_sub_std(23.std_hours()), Some(Date::MIN));
assert_eq!(
date!(2020-12-31).checked_sub_std(23.std_hours()),
Some(date!(2020-12-31))
);
assert_eq!(
date!(2020-12-31).checked_sub_std(47.std_hours()),
Some(date!(2020-12-30))
);Sourcepub fn saturating_add(self, duration: SignedDuration) -> Date
pub fn saturating_add(self, duration: SignedDuration) -> Date
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.
assert_eq!(
date!(2020-12-31).saturating_add(23.hours()),
date!(2020-12-31)
);
assert_eq!(
date!(2020-12-31).saturating_add(47.hours()),
date!(2021-01-01)
);Sourcepub fn saturating_sub(self, duration: SignedDuration) -> Date
pub fn saturating_sub(self, duration: SignedDuration) -> Date
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.
assert_eq!(
date!(2020-12-31).saturating_sub(23.hours()),
date!(2020-12-31)
);
assert_eq!(
date!(2020-12-31).saturating_sub(47.hours()),
date!(2020-12-30)
);Sourcepub fn replace_year(self, year: i32) -> Result<Date, ComponentRange>
pub fn replace_year(self, year: i32) -> Result<Date, ComponentRange>
Replace the year. The month and day will be unchanged.
assert_eq!(
date!(2022-02-18).replace_year(2019),
Ok(date!(2019-02-18))
);
assert!(date!(2022-02-18).replace_year(-1_000_000_000).is_err()); // -1_000_000_000 isn't a valid year
assert!(date!(2022-02-18).replace_year(1_000_000_000).is_err()); // 1_000_000_000 isn't a valid yearSourcepub fn replace_month(self, month: Month) -> Result<Date, ComponentRange>
pub fn replace_month(self, month: Month) -> Result<Date, ComponentRange>
Replace the month of the year.
assert_eq!(
date!(2022-02-18).replace_month(Month::January),
Ok(date!(2022-01-18))
);
assert!(date!(2022-01-30)
.replace_month(Month::February)
.is_err()); // 30 isn't a valid day in FebruarySourcepub fn replace_day(self, day: u8) -> Result<Date, ComponentRange>
pub fn replace_day(self, day: u8) -> Result<Date, ComponentRange>
Replace the day of the month.
assert_eq!(date!(2022-02-18).replace_day(1), Ok(date!(2022-02-01)));
assert!(date!(2022-02-18).replace_day(0).is_err()); // 0 isn't a valid day
assert!(date!(2022-02-18).replace_day(30).is_err()); // 30 isn't a valid day in FebruarySourcepub fn replace_ordinal(self, ordinal: u16) -> Result<Date, ComponentRange>
pub fn replace_ordinal(self, ordinal: u16) -> Result<Date, ComponentRange>
Replace the day of the year.
assert_eq!(date!(2022-049).replace_ordinal(1), Ok(date!(2022-001)));
assert!(date!(2022-049).replace_ordinal(0).is_err()); // 0 isn't a valid ordinal
assert!(date!(2022-049).replace_ordinal(366).is_err()); // 2022 isn't a leap yearSourcepub fn midnight(self) -> PlainDateTime
pub fn midnight(self) -> PlainDateTime
Create a PlainDateTime using the existing date. The Time component will be set to
midnight.
assert_eq!(date!(1970-01-01).midnight(), datetime!(1970-01-01 0:00));Sourcepub fn with_time(self, time: Time) -> PlainDateTime
pub fn with_time(self, time: Time) -> PlainDateTime
Create a PlainDateTime using the existing date and the provided Time.
assert_eq!(
date!(1970-01-01).with_time(time!(0:00)),
datetime!(1970-01-01 0:00),
);Sourcepub fn with_hms(
self,
hour: u8,
minute: u8,
second: u8,
) -> Result<PlainDateTime, ComponentRange>
pub fn with_hms( self, hour: u8, minute: u8, second: u8, ) -> Result<PlainDateTime, ComponentRange>
Attempt to create a PlainDateTime using the existing date and the provided time.
assert!(date!(1970-01-01).with_hms(0, 0, 0).is_ok());
assert!(date!(1970-01-01).with_hms(24, 0, 0).is_err());Sourcepub fn with_hms_milli(
self,
hour: u8,
minute: u8,
second: u8,
millisecond: u16,
) -> Result<PlainDateTime, ComponentRange>
pub fn with_hms_milli( self, hour: u8, minute: u8, second: u8, millisecond: u16, ) -> Result<PlainDateTime, ComponentRange>
Attempt to create a PlainDateTime using the existing date and the provided time.
assert!(date!(1970-01-01).with_hms_milli(0, 0, 0, 0).is_ok());
assert!(date!(1970-01-01).with_hms_milli(24, 0, 0, 0).is_err());Sourcepub fn with_hms_micro(
self,
hour: u8,
minute: u8,
second: u8,
microsecond: u32,
) -> Result<PlainDateTime, ComponentRange>
pub fn with_hms_micro( self, hour: u8, minute: u8, second: u8, microsecond: u32, ) -> Result<PlainDateTime, ComponentRange>
Attempt to create a PlainDateTime using the existing date and the provided time.
assert!(date!(1970-01-01).with_hms_micro(0, 0, 0, 0).is_ok());
assert!(date!(1970-01-01).with_hms_micro(24, 0, 0, 0).is_err());Sourcepub fn with_hms_nano(
self,
hour: u8,
minute: u8,
second: u8,
nanosecond: u32,
) -> Result<PlainDateTime, ComponentRange>
pub fn with_hms_nano( self, hour: u8, minute: u8, second: u8, nanosecond: u32, ) -> Result<PlainDateTime, ComponentRange>
Attempt to create a PlainDateTime using the existing date and the provided time.
assert!(date!(1970-01-01).with_hms_nano(0, 0, 0, 0).is_ok());
assert!(date!(1970-01-01).with_hms_nano(24, 0, 0, 0).is_err());Sourcepub 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 Date 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 Date using the provided format description.
let format = format_description::parse_borrowed::<3>("[year]-[month]-[day]")?;
assert_eq!(date!(2020-01-02).format(&format)?, "2020-01-02");