5 个版本
| 0.2.4 | 2022年11月14日 |
|---|---|
| 0.2.3 | 2022年5月24日 |
| 0.2.1 | 2021年1月24日 |
| 0.2.0 | 2020年10月17日 |
| 0.1.0 |
|
#85 在 日期和时间 中
8,363 每月下载量
在 11 个Crates中使用 (直接使用 3 个)
71KB
1.5K SLoC
gregorian

一个格里高利历的实现,与ISO 8601兼容。这意味着日历在1年之前有一个0年。
此创建不处理时间或时区。
Date 类型表示日期(年、月和日),Year 类型表示日历年,Month 类型表示日历月,YearMonth 类型表示特定年份的月份。
尽可能将事物实现为 const fn。目前,这不包括特性和依赖于特性的函数。
示例
use gregorian::{Date, Month::*, Year, YearMonth};
assert!(Year::new(2020).has_leap_day(), true);
assert!(YearMonth::new(1900, February).total_days() == 28);
assert!(YearMonth::new(2000, February).total_days() == 29);
assert!(Year::new(2020).with_month(March).first_day() == Date::new(2020, March, 1).unwrap());
assert!(Year::new(2020).with_month(March).last_day() == Date::new(2020, March, 31).unwrap());
assert!(Year::new(2020).first_day() == Date::new(2020, 1, 1).unwrap());
assert!(Year::new(2020).last_day() == Date::new(2020, 12, 31).unwrap());
assert!(Date::new(2020, 2, 1).unwrap().day_of_year() == 32);
四舍五入无效日期
当您使用 Date::add_years() 或 Date::add_months() 方法时,可能会得到无效日期。这些错误会以 InvalidDayOfMonth 错误的形式报告,该错误具有 next_valid() 和 prev_valid() 方法。这些方法可以用来获取下一个或前一个有效日期。
此外,还有一个扩展特质为 Result<Date, InvalidDayOfMonth> 提供了 or_next_valid() 和 or_prev_valid() 方法。这允许您直接在 Result 对象上对日期进行舍入。
use gregorian::{Date, DateResultExt};
let date = Date::new(2020, 1, 31).unwrap();
assert!(date.add_months(1).or_next_valid() == Date::new(2020, 3, 1).unwrap());
assert!(date.add_months(1).or_prev_valid() == Date::new(2020, 2, 29).unwrap());
依赖项
~180KB