7个版本
0.1.4 | 2024年5月12日 |
---|---|
0.1.3 | 2022年4月21日 |
0.1.2 | 2021年1月29日 |
0.1.1 | 2019年9月15日 |
0.0.1 | 2018年11月26日 |
#31 in 日期和时间
8,889 个月下载量
用于 2 个包
105KB
1.5K SLoC
bdays
提供在给定节假日日历的情况下计算日期之间工作日的函数。
商务日被定义为非节假日的平日。
要检查日期是否为节假日,你必须提供一个 HolidayCalendar
特质的实现。
此包是从 BusinessDays.jl 翻译到Rust编程语言的。
提供的节假日日历
此包在 bdays::calendars
子模块中提供一组内置的节假日日历。
-
bdays::calendars::WeekendsOnly
: 仅计算周末 -
bdays::calendars::brazil::BRSettlement
: 巴西银行节假日 -
bdays::calendars::brazil::BrazilExchange
: B3交易所节假日 (http://www.b3.com.br) -
bdays::calendars::us::USSettlement
: 美国联邦节假日
使用方法
将这些依赖项添加到您的 Cargo.toml
文件中。
[dependencies]
bdays = "0.1"
chrono = "0.4"
以下示例展示了此包的基本功能。
use chrono::NaiveDate;
use bdays::HolidayCalendar;
fn main() {
// creates a holiday calendar instance
let cal = bdays::calendars::WeekendsOnly;
let d0 = NaiveDate::from_ymd(2018, 11, 22);
let d1 = NaiveDate::from_ymd(2018, 11, 24);
let d2 = NaiveDate::from_ymd(2018, 11, 26);
// checks if a date is a holiday
assert_eq!( cal.is_holiday(d0), false );
// checks if a date is a business day
assert_eq!( cal.is_bday(d0), true );
assert_eq!( cal.is_bday(d1), false );
// adjusts to the last/next business day
assert_eq!( cal.to_bday(d1, false), NaiveDate::from_ymd(2018, 11, 23) );
assert_eq!( cal.to_bday(d1, true) , d2 );
// advances a number of business days
assert_eq!( cal.advance_bdays(d0, 2), d2 );
assert_eq!( cal.advance_bdays(d2, -2), d0 );
// returns the number of business days between dates
assert_eq!( cal.bdays(d0, d2), 2);
assert_eq!( cal.bdays(d2, d0), -2);
}
HolidayCalendarCache
作为一个激励,这个例子可能需要一些时间才能完成。
use chrono::NaiveDate;
use bdays::HolidayCalendar;
let cal = bdays::calendars::brazil::BRSettlement;
let d0 = NaiveDate::from_ymd(2001, 2, 1);
let d1 = NaiveDate::from_ymd(2100, 2, 1);
for _i in 0..30 {
cal.bdays(d0, d1);
}
您可以使用 HolidayCalendarCache
对给定日期范围内的日期进行快速的工作日计算。
use chrono::NaiveDate;
use bdays::HolidayCalendar;
let cal = bdays::HolidayCalendarCache::new(
bdays::calendars::brazil::BRSettlement,
NaiveDate::from_ymd(1980, 1, 1),
NaiveDate::from_ymd(2100, 12, 31)
);
let d0 = NaiveDate::from_ymd(2001, 2, 1);
let d1 = NaiveDate::from_ymd(2100, 2, 1);
for _i in 0..30 {
cal.bdays(d0, d1);
}
依赖项
~1MB
~18K SLoC