Crates.io | icu_calendar |
lib.rs | icu_calendar |
version | 2.0.5 |
created_at | 2021-04-29 19:58:35.971856+00 |
updated_at | 2025-09-05 20:45:16.764269+00 |
description | Date APIs for Gregorian and non-Gregorian calendars |
homepage | https://icu4x.unicode.org |
repository | https://github.com/unicode-org/icu4x |
max_upload_size | |
id | 391236 |
size | 608,910 |
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 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);
For more information on development, authorship, contributing etc. please visit ICU4X home page
.