jpholiday 0.2.0

Pure-Rust library to determine Japanese public holidays. 日本の祝日を扱う依存ゼロのRustライブラリ。
Documentation

JPHoliday

crates.io docs.rs License: MIT CI

このライブラリは、内閣府 が公表しているデータを基に、日本の国民の祝日を簡単に取得できるようにしたものです。 標準ライブラリのみで動作し、外部クレートには一切依存しません。 2027年までの祝日は公式発表された内容に基づいて動作確認済みです。 それ以降についても取得は可能ですが、内閣府からの正式な公表がないため、正確性は保証されません。

Installation

Cargo.toml に追記:

[dependencies]
jpholiday = "0.2"

Class

指定日の祝日名を取得

use jpholiday::{Date, JPHoliday};

let jpholiday = JPHoliday::new();

jpholiday.holidays(Date::new(2017, 1, 1).unwrap());
// => [Holiday { date: 2017-01-01, name: "元日" }]

jpholiday.holidays(Date::new(2017, 1, 2).unwrap());
// => [Holiday { date: 2017-01-02, name: "元日 振替休日" }]

jpholiday.holidays(Date::new(2017, 1, 3).unwrap());
// => []

指定日が祝日か判定

use jpholiday::{Date, JPHoliday};

let jpholiday = JPHoliday::new();

jpholiday.is_holiday(Date::new(2017, 1, 1).unwrap());
// => true
jpholiday.is_holiday(Date::new(2017, 1, 2).unwrap());
// => true
jpholiday.is_holiday(Date::new(2017, 1, 3).unwrap());
// => false

指定年の祝日を取得

use jpholiday::{Date, JPHoliday};

let jpholiday = JPHoliday::new();

jpholiday.year_holidays(2017);
// => [
//   Holiday { date: 2017-01-01, name: "元日" },
//   Holiday { date: 2017-01-02, name: "元日 振替休日" },
//   Holiday { date: 2017-01-09, name: "成人の日" },
//   ...
// ]

指定月の祝日を取得

use jpholiday::{Date, JPHoliday};

let jpholiday = JPHoliday::new();

jpholiday.month_holidays(2017, 5);
// => [
//   Holiday { date: 2017-05-03, name: "憲法記念日" },
//   Holiday { date: 2017-05-04, name: "みどりの日" },
//   Holiday { date: 2017-05-05, name: "こどもの日" },
// ]

指定範囲の祝日を取得

use jpholiday::{Date, JPHoliday};

let jpholiday = JPHoliday::new();

jpholiday.between(
    Date::new(2017, 1, 1).unwrap(),
    Date::new(2017, 5, 3).unwrap(),
);
// => [
//   Holiday { date: 2017-01-01, name: "元日" },
//   Holiday { date: 2017-01-02, name: "元日 振替休日" },
//   ...
//   Holiday { date: 2017-05-03, name: "憲法記念日" },
// ]

独自の休日を追加

use jpholiday::{Date, JPHoliday, OriginalHolidayChecker};

struct TestHoliday;

impl OriginalHolidayChecker for TestHoliday {
    fn is_holiday(&self, date: Date) -> bool {
        date == Date::new(2020, 2, 9).unwrap()
    }
    fn holiday_name(&self, _date: Date) -> String {
        "特別休暇".to_string()
    }
}

let mut jpholiday = JPHoliday::new();
jpholiday.register(TestHoliday);

jpholiday.holidays(Date::new(2020, 2, 9).unwrap());
// => [Holiday { date: 2020-02-09, name: "特別休暇" }]

jpholiday.is_holiday(Date::new(2020, 2, 9).unwrap());
// => true

独自の休日を削除

use jpholiday::{Date, JPHoliday, OriginalHolidayChecker};

struct TestHoliday;

impl OriginalHolidayChecker for TestHoliday {
    fn is_holiday(&self, date: Date) -> bool {
        date == Date::new(2020, 2, 9).unwrap()
    }
    fn holiday_name(&self, _date: Date) -> String {
        "特別休暇".to_string()
    }
}

let mut jpholiday = JPHoliday::new();
jpholiday.register(TestHoliday);

// 登録解除は型パラメータで指定
jpholiday.unregister::<TestHoliday>();

jpholiday.holidays(Date::new(2020, 2, 9).unwrap());
// => []

jpholiday.is_holiday(Date::new(2020, 2, 9).unwrap());
// => false

Functions

指定日の祝日名を取得

use jpholiday::Date;

jpholiday::is_holiday_name(Date::new(2017, 1, 1).unwrap());
// => Some("元日")
jpholiday::is_holiday_name(Date::new(2017, 1, 2).unwrap());
// => Some("元日 振替休日")
jpholiday::is_holiday_name(Date::new(2017, 1, 3).unwrap());
// => None

指定日が祝日か判定

use jpholiday::Date;

jpholiday::is_holiday(Date::new(2017, 1, 1).unwrap());
// => true
jpholiday::is_holiday(Date::new(2017, 1, 2).unwrap());
// => true
jpholiday::is_holiday(Date::new(2017, 1, 3).unwrap());
// => false

指定年の祝日を取得

use jpholiday::Date;

jpholiday::year_holidays(2017);
// => [
//   (2017-01-01, "元日"),
//   (2017-01-02, "元日 振替休日"),
//   (2017-01-09, "成人の日"),
//   (2017-02-11, "建国記念の日"),
//   (2017-03-20, "春分の日"),
//   (2017-04-29, "昭和の日"),
//   (2017-05-03, "憲法記念日"),
//   (2017-05-04, "みどりの日"),
//   (2017-05-05, "こどもの日"),
//   (2017-07-17, "海の日"),
//   (2017-08-11, "山の日"),
//   (2017-09-18, "敬老の日"),
//   (2017-09-23, "秋分の日"),
//   (2017-10-09, "体育の日"),
//   (2017-11-03, "文化の日"),
//   (2017-11-23, "勤労感謝の日"),
//   (2017-12-23, "天皇誕生日"),
// ]

指定月の祝日を取得

use jpholiday::Date;

jpholiday::month_holidays(2017, 5);
// => [
//   (2017-05-03, "憲法記念日"),
//   (2017-05-04, "みどりの日"),
//   (2017-05-05, "こどもの日"),
// ]

指定範囲の祝日を取得

use jpholiday::Date;

jpholiday::between(
    Date::new(2017, 1, 1).unwrap(),
    Date::new(2017, 5, 3).unwrap(),
);
// => [
//   (2017-01-01, "元日"),
//   (2017-01-02, "元日 振替休日"),
//   (2017-01-09, "成人の日"),
//   (2017-02-11, "建国記念の日"),
//   (2017-03-20, "春分の日"),
//   (2017-04-29, "昭和の日"),
//   (2017-05-03, "憲法記念日"),
// ]

独自の休日を追加

use jpholiday::{Date, OriginalHolidayChecker};

struct TestHoliday;

impl OriginalHolidayChecker for TestHoliday {
    fn is_holiday(&self, date: Date) -> bool {
        date == Date::new(2020, 2, 9).unwrap()
    }
    fn holiday_name(&self, _date: Date) -> String {
        "特別休暇".to_string()
    }
}

jpholiday::register(TestHoliday);

jpholiday::is_holiday_name(Date::new(2020, 2, 9).unwrap());
// => Some("特別休暇")

jpholiday::is_holiday(Date::new(2020, 2, 9).unwrap());
// => true

独自の休日を削除

use jpholiday::{Date, OriginalHolidayChecker};

struct TestHoliday;

impl OriginalHolidayChecker for TestHoliday {
    fn is_holiday(&self, date: Date) -> bool {
        date == Date::new(2020, 2, 9).unwrap()
    }
    fn holiday_name(&self, _date: Date) -> String {
        "特別休暇".to_string()
    }
}

jpholiday::register(TestHoliday);

// 登録解除は型パラメータで指定
jpholiday::unregister::<TestHoliday>();

jpholiday::is_holiday_name(Date::new(2020, 2, 9).unwrap());
// => None

jpholiday::is_holiday(Date::new(2020, 2, 9).unwrap());
// => false

License

MIT License. 詳細は LICENSE を参照してください。