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