15 个版本 (稳定版)
1.5.2 | 2024 年 6 月 24 日 |
---|---|
1.5.0 | 2024 年 5 月 28 日 |
1.4.0 | 2023 年 11 月 16 日 |
1.2.0 | 2023 年 4 月 14 日 |
0.0.1 | 2021 年 4 月 29 日 |
#90 在 国际化 (i18n) 中排名
每月 82,775 次下载
在 42 个 包中使用 42 个直接使用
2MB
38K SLoC
icu_calendar
处理日期、时间和自定义日历的类型。
此模块作为其自己的包 (icu_calendar
) 和 icu
包的一部分发布。有关 ICU4X 项目的更多详细信息,请参阅后者。 Calendar
模块包含处理日期和时间的许多常用类型。
Calendar
是一个 trait,允许定义自定义日历,而 Date
可以表示任意日历的日期。
iso
和 gregorian
模块分别包含 ISO 和公历的实现。更多日历可以在 japanese
、julian
、coptic
、indian
、buddhist
和 ethiopian
等模块中找到。
与该包的大部分交互将通过 Date
和 DateTime
类型进行。
此处实现的一些算法基于Dershowitz, Nachum, 和 Edward M. Reingold的《历法计算》。剑桥大学出版社,2008年。相关Lisp代码可在https://github.com/EdReingold/calendar-code2找到。
示例
使用Date
对象进行日期操作的示例。Date
对象对处理日期非常有用,它包含有关日、月、年以及日历类型的信息。
use icu::calendar::{types::IsoWeekday, Date};
// Creating ISO date: 1992-09-02.
let mut date_iso = Date::try_new_iso_date(1992, 9, 2)
.expect("Failed to initialize ISO Date instance.");
assert_eq!(date_iso.day_of_week(), IsoWeekday::Wednesday);
assert_eq!(date_iso.year().number, 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);
将ISO日期转换为印度和佛教日历的示例。
use icu::calendar::{buddhist::Buddhist, indian::Indian, Date};
// Creating ISO date: 1992-09-02.
let mut date_iso = Date::try_new_iso_date(1992, 9, 2)
.expect("Failed to initialize ISO Date instance.");
assert_eq!(date_iso.year().number, 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.year().number, 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.year().number, 2535);
assert_eq!(date_buddhist.month().ordinal, 9);
assert_eq!(date_buddhist.day_of_month().0, 2);
使用DateTime
对象的示例。与Date
对象类似,DateTime
对象包含一个可访问的Date
对象,其中包含有关日、月、年、日历类型的信息。此外,DateTime
对象还包含一个可访问的Time
对象,包括小时、分钟、秒和纳秒的粒度。
use icu::calendar::{types::IsoWeekday, DateTime, Time};
// Creating ISO date: 1992-09-02 8:59
let mut datetime_iso = DateTime::try_new_iso_datetime(1992, 9, 2, 8, 59, 0)
.expect("Failed to initialize ISO DateTime instance.");
assert_eq!(datetime_iso.date.day_of_week(), IsoWeekday::Wednesday);
assert_eq!(datetime_iso.date.year().number, 1992);
assert_eq!(datetime_iso.date.month().ordinal, 9);
assert_eq!(datetime_iso.date.day_of_month().0, 2);
assert_eq!(datetime_iso.time.hour.number(), 8);
assert_eq!(datetime_iso.time.minute.number(), 59);
assert_eq!(datetime_iso.time.second.number(), 0);
assert_eq!(datetime_iso.time.nanosecond.number(), 0);
更多信息
有关开发、作者身份、贡献等信息,请访问ICU4X 主页
。
依赖关系
~1.1–1.8MB
~36K SLoC