Expand description
Types for dealing with dates and custom calendars.
This module is published as its own crate (icu_calendar)
and as part of the icu crate. See the latter for more details on the ICU4X project.
The types module has a lot of common types for dealing with dates.
Calendar is a trait that allows one to define custom calendars, and Date
can represent dates for arbitrary calendars.
The Iso and Gregorian types are implementations for the ISO and
Gregorian calendars respectively. Further calendars can be found in the cal module.
Most interaction with this crate will be done via the Date type.
Some of the algorithms implemented here are based on Dershowitz, Nachum, and Edward M. Reingold. Calendrical calculations. Cambridge University Press, 2008. with associated Lisp code found at https://github.com/EdReingold/calendar-code2.
§Examples
Examples of date manipulation using Date object. Date objects are useful
for working with dates, encompassing information about the day, month, year,
as well as the calendar type.
use icu::calendar::{types::Weekday, Date};
// Creating ISO date: 1992-09-02.
let mut date_iso = Date::try_new_iso(1992, 9, 2)
.expect("Failed to initialize ISO Date instance.");
assert_eq!(date_iso.day_of_week(), Weekday::Wednesday);
assert_eq!(date_iso.era_year().year, 1992);
assert_eq!(date_iso.month().ordinal, 9);
assert_eq!(date_iso.day_of_month().0, 2);
// Answering questions about days in month and year.
assert_eq!(date_iso.days_in_year(), 366);
assert_eq!(date_iso.days_in_month(), 30);Example of converting an ISO date across Indian and Buddhist calendars.
use icu::calendar::cal::{Buddhist, Indian};
use icu::calendar::Date;
// Creating ISO date: 1992-09-02.
let mut date_iso = Date::try_new_iso(1992, 9, 2)
.expect("Failed to initialize ISO Date instance.");
assert_eq!(date_iso.era_year().year, 1992);
assert_eq!(date_iso.month().ordinal, 9);
assert_eq!(date_iso.day_of_month().0, 2);
// Conversion into Indian calendar: 1914-08-02.
let date_indian = date_iso.to_calendar(Indian);
assert_eq!(date_indian.era_year().year, 1914);
assert_eq!(date_indian.month().ordinal, 6);
assert_eq!(date_indian.day_of_month().0, 11);
// Conversion into Buddhist calendar: 2535-09-02.
let date_buddhist = date_iso.to_calendar(Buddhist);
assert_eq!(date_buddhist.era_year().year, 2535);
assert_eq!(date_buddhist.month().ordinal, 9);
assert_eq!(date_buddhist.day_of_month().0, 2);Modules§
- cal
- Types for individual calendars
- preferences
- Locale preferences used by this crate
- provider
- 🚧 [Unstable] Data provider struct definitions for this ICU4X component.
- types
- This module contains various types used by
icu_calendarandicu::datetime - week
- Functions for region-specific weekday information.
Structs§
- Date
- A date for a given calendar.
- Gregorian
- The (proleptic) Gregorian Calendar
- Iso
- The ISO-8601 Calendar
- Range
Error - An argument is out of range for its domain.
- Ref
- This exists as a wrapper around
&'a Tso thatDate<&'a C>is possible for calendarC.
Enums§
- AnyCalendar
- This is a calendar that encompasses all formattable calendars supported by this crate
- AnyCalendar
Kind - Convenient type for selecting the kind of AnyCalendar to construct
- Date
Error - Error type for date creation.
- Parse
Error - An error returned from parsing an RFC 9557 string to an
icu_calendartype.
Traits§
- AsCalendar
- Types that contain a calendar
- Calendar
- A calendar implementation
- Into
AnyCalendar - Trait for calendars that may be converted to
AnyCalendar