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) 中排名

Download history 5081/week @ 2024-05-04 4786/week @ 2024-05-11 4484/week @ 2024-05-18 4923/week @ 2024-05-25 5000/week @ 2024-06-01 4358/week @ 2024-06-08 4263/week @ 2024-06-15 4658/week @ 2024-06-22 4724/week @ 2024-06-29 5733/week @ 2024-07-06 8241/week @ 2024-07-13 6070/week @ 2024-07-20 9261/week @ 2024-07-27 23729/week @ 2024-08-03 24705/week @ 2024-08-10 23959/week @ 2024-08-17

每月 82,775 次下载
42 包中使用 42 个直接使用

Unicode-3.0

2MB
38K SLoC

icu_calendar crates.io

处理日期、时间和自定义日历的类型。

此模块作为其自己的包 (icu_calendar) 和 icu 包的一部分发布。有关 ICU4X 项目的更多详细信息,请参阅后者。 Calendar 模块包含处理日期和时间的许多常用类型。

Calendar 是一个 trait,允许定义自定义日历,而 Date 可以表示任意日历的日期。

isogregorian 模块分别包含 ISO 和公历的实现。更多日历可以在 japanesejuliancopticindianbuddhistethiopian 等模块中找到。

与该包的大部分交互将通过 DateDateTime 类型进行。

此处实现的一些算法基于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