1 个不稳定版本
0.1.0 | 2023 年 2 月 2 日 |
---|
在 日期和时间 中排名第 297
每月下载 39 次
7MB
102K SLoC
holidays-rs
设计
python-holidays 是一个维护良好的包,用于动态生成节假日。另一方面,本库不是将 python-holidays
转移到 Rust,而是使用 python-holidays
的脚本静态生成节假日的 Rust 代码。由于本库的节假日数据库简化为一个线程安全的 HashMap
(存在单线程使用选项),因此它在大多数情况下都非常快且灵活。
为了保持节假日数据库的新鲜性,我们计划使用 Github Actions 任务来自动
- 使用脚本通过最新的
python-holidays
生成代码 - 构建和运行测试
- 如果有任何更改,它将增加版本并发布到 crates.io
使用方法
最简单的使用方法是调用 holidays::init
来在线程安全的 HashMap
中初始化节假日数据库。节假日数据库初始化后,您可以调用 holidays::contains
来检查指定日期是否为节假日。调用 holidays::get
生成一个包含国家代码、国家名称、日期和节假日名称的对象。
use chrono::NaiveDate;
use holidays::Country;
fn main() -> anyhow::Result<()> {
holidays::init()?;
let d = NaiveDate::from_ymd_opt(2022, 1, 1).expect("Invalid date");
println!("Is {d} a holiday in Japan? Answer is {}", holidays::contains(Country::JP, d)?);
println!("{:?}", holidays::get(Country::JP, d)?.unwrap());
Ok(())
}
注意,holidays::init
会将所有支持的国家和年份的节假日加载到内存中,所以它相当重。 如果您需要某些国家和年份的节假日,请考虑使用 holidays::Builder
来限制它们。
holidays::Builder::new()
.countries(&[Country::JP])
.years(2022..2023)
.init()?;
如果您在编译时知道需要哪些国家,您可以在 Cargo.toml
中指定国家代码。这可以显着提高构建性能。
holidays = { version = "*", default-features = false, features = ["JP"] }
支持的国家和年份
holidays-rs 支持 2000 年至 2023 年以下链接中列出的国家。
https://github.com/dr-prodigy/python-holidays#available-countries
常见问题解答
- 问题:我如何在单线程环境中使用此库?
- 不要调用
init
或holidays::Builder
的init
方法。相反,你可以通过调用holidays::Builder
的build
方法来获取内部的 HashMap。
致谢
非常感谢 python-holidays 贡献者 维护这样一个优秀的包!🙏
许可证
本项目采用 MIT 许可证。
依赖项
~1.3–2MB
~37K SLoC