jpholiday

package module
v0.0.0-...-cb2d870 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2018 License: MIT Imports: 2 Imported by: 0

README

jpholiday

日本の祝日ライブラリ。ある日付が祝日かどうか判定し、

祝日なら何の祝日かを返す関数がついてます。

振替休日/国民の休日かどうかも判定します。

春分の日と秋分の日については、 2000年〜2030年のみ対応。

この2つの祝日は本来、前年の官庁発表で正式に決定するので、 2015年時点での天文台予測の春分日、秋分日が含まれています。

また、海の日とか敬老の日とかの2002年以前(ハッピーマンデー化前)は未対応なので、 ハッピーマンデー化前の現行祝日を登録したけど、 昔の祝日については、テストが足りてないところもあるので、 実質2003年~2030年が対応年です。

package main

import (
	"fmt"
	jp "github.com/kokardy/jpholiday"
)

func main() {
	day := jp.NewDate(2013, 5, 4)
	isHoliday, holiday := day.Holiday()
	if isHoliday {
		fmt.Printf("%s is %s \n", day, holiday) //2013-05-04 is みどりの日
	}
}

Documentation

Index

Constants

View Source
const (
	GANTAN       NamedHoliday = iota
	SEIJIN                    = iota
	KENKOKUKINEN              = iota
	SHUNBUN                   = iota
	SHOWA                     = iota
	KENPOKINEN                = iota
	MIDORI                    = iota
	KODOMO                    = iota
	UMI                       = iota
	KEIRO                     = iota
	SHUBUN                    = iota
	TAIIKU                    = iota
	BUNKA                     = iota
	KINROKANSHA               = iota
	TENNOTANJOBI              = iota
	YAMA                      = iota

	//振替休日
	FURIKAEKYUJITSU NamedHoliday = iota
	//国民の休日
	KOKUMINNOKYUJITSU NamedHoliday = iota
)

Variables

View Source
var (
	LOCATION_JP, _ = time.LoadLocation("Asia/Tokyo") // Japan Locale
	DHCF           = DynamicHolidayCheckerFactory    // Alias
	SHCF           = StaticHolidayCheckerFactory     // Alias
	HCF            = HolidayCheckerFactory           // Alias
	EVER           = NewDate(2999, 12, 31)
	LAWDAY         = NewDate(1948, 7, 20)
)
View Source
var (
	HOLIDAY_NAMES = map[NamedHoliday]string{
		GANTAN:            "元旦",
		SEIJIN:            "成人の日",
		KENKOKUKINEN:      "建国記念の日",
		SHUNBUN:           "春分の日",
		SHOWA:             "昭和の日",
		KENPOKINEN:        "憲法記念日",
		MIDORI:            "みどりの日",
		KODOMO:            "こどもの日",
		UMI:               "海の日",
		KEIRO:             "敬老の日",
		SHUBUN:            "秋分の日",
		TAIIKU:            "体育の日",
		BUNKA:             "文化の日",
		KINROKANSHA:       "勤労感謝の日",
		TENNOTANJOBI:      "天皇誕生日",
		FURIKAEKYUJITSU:   "振替休日",
		KOKUMINNOKYUJITSU: "国民の休日",
		YAMA:              "山の日",
	}
)

祝日の名前マップ

View Source
var (
	// 祝日チェッカー関数のmap
	NAMED_HOLIDAYS = map[NamedHoliday]func(Date) bool{
		GANTAN: SHCF(1, 1, NewRange(LAWDAY, EVER)),
		SEIJIN: HCF(
			SHCF(1, 15, NewRange(LAWDAY, NewDate(1999, 12, 31))),
			DHCF(1, 2, time.Monday, NewRange(NewDate(2000, 1, 1), EVER))),
		KENKOKUKINEN: SHCF(2, 11, NewRange(NewDate(1966, 1, 1), EVER)),
		SHUNBUN:      ShunbunCheker,
		SHOWA:        SHCF(4, 29, NewRange(NewDate(2007, 1, 1), EVER)),
		KENPOKINEN:   SHCF(5, 3, NewRange(LAWDAY, EVER)),
		MIDORI: HCF(
			SHCF(4, 29, NewRange(NewDate(1989, 1, 1), NewDate(2006, 12, 31))),
			SHCF(5, 4, NewRange(NewDate(2007, 1, 1), EVER))),
		KODOMO: SHCF(5, 5, NewRange(LAWDAY, EVER)),
		UMI: HCF(
			SHCF(7, 20, NewRange(NewDate(1996, 1, 1), NewDate(2002, 12, 31))),
			DHCF(7, 3, time.Monday, NewRange(NewDate(2003, 1, 1), EVER))),
		KEIRO: HCF(
			SHCF(9, 15, NewRange(LAWDAY, NewDate(2002, 12, 1))),
			DHCF(9, 3, time.Monday, NewRange(NewDate(2003, 1, 1), EVER))),
		SHUBUN: ShubunCheker,
		TAIIKU: HCF(
			SHCF(10, 10, NewRange(LAWDAY, NewDate(1999, 12, 31))),
			DHCF(10, 2, time.Monday, NewRange(NewDate(2000, 1, 1), EVER))),
		BUNKA:       SHCF(11, 3, NewRange(LAWDAY, EVER)),
		KINROKANSHA: SHCF(11, 23, NewRange(LAWDAY, EVER)),
		TENNOTANJOBI: HCF(
			SHCF(4, 29, NewRange(LAWDAY, NewDate(1989, 2, 16))),
			SHCF(12, 23, NewRange(NewDate(1989, 2, 17), NewDate(2018, 12, 31))),
			SHCF(2, 23, NewRange(NewDate(2020, 1, 1), EVER))),
		YAMA: SHCF(8, 11, NewRange(NewDate(2016, 1, 1), EVER)),
	}
)
View Source
var SHUBUN_DAYS = []int{
	23,
	23,
	23,
	23,
	23,
	23,
	23,
	23,
	23,
	23,
	23,
	23,
	22,
	23,
	23,
	23,
	22,
	23,
	23,
	23,
	22,
	23,
	23,
	23,
	22,
	23,
	23,
	23,
	22,
	23,
	23,
}
View Source
var SHUBUN_LIST = map[Date]struct{}{}

秋分の日リスト。予測を含む。init()で初期化

View Source
var SHUNBUN_DAYS = []int{
	20,
	20,
	21,
	21,
	20,
	20,
	21,
	21,
	20,
	20,
	21,
	21,
	20,
	20,
	21,
	21,
	20,
	20,
	21,
	21,
	20,
	20,
	21,
	21,
	20,
	20,
	20,
	21,
	20,
	20,
	20,
}
View Source
var SHUNBUN_LIST = map[Date]struct{}{}

春分の日リスト。予測を含む。init()で初期化。

Functions

func DynamicHolidayCheckerFactory

func DynamicHolidayCheckerFactory(month time.Month, nth int, weekday time.Weekday, period Range) (f func(Date) bool)

第X Y曜日で判定する関数を作成するファクトリ関数 ハッピーマンデーなどに使用。

func HolidayCheckerFactory

func HolidayCheckerFactory(funcs ...func(Date) bool) (f func(Date) bool)

祝日判定関数のWrapper

func ShubunCheker

func ShubunCheker(d Date) bool

秋分の日判定関数

func ShunbunCheker

func ShunbunCheker(d Date) bool

春分の日判定関数

func StaticHolidayCheckerFactory

func StaticHolidayCheckerFactory(month time.Month, day int, period Range) (f func(Date) bool)

何月何日で判定する関数を作成するファクトリ関数 毎年同じ日付の祝日に使用

Types

type Date

type Date struct {
	time.Time
}

祝日判定用日付構造体。 時間以下のデータは無視する。 NewDate, TimeToDateでオブジェクト作成することで時間以下のデータをzero-fillして作る。 Date{time.Time}で作成しないこと。

func NewDate

func NewDate(year int, month time.Month, day int) (d Date)

年、月、日からDateを生成する

func TimeToDate

func TimeToDate(t time.Time) (d Date)

time.TimeからDateを生成する

func (Date) AlternativeHoliday

func (d Date) AlternativeHoliday() (isHoliday bool)

振り替え休日ならtrue otherwise false

func (Date) Equal

func (d Date) Equal(another Date) bool

Dateの同一性判定

func (Date) Holiday

func (d Date) Holiday() (isHoliday bool, holiday NamedHoliday)

祝日ならtrueと祝日を返す。 振替休日と国民の休日もチェックする

func (Date) IsSandwitched

func (d Date) IsSandwitched() (isHoliday bool)

国民の休日ならtrue otheriwise false

func (Date) NthWeekday

func (d Date) NthWeekday() (nth int)

その曜日がその月で何回目かを返す

func (Date) RealHoliday

func (d Date) RealHoliday() (isHoliday bool, holiday NamedHoliday)

国民の祝日ならtrueと祝日を返す。 振替休日と国民の休日はチェックしない。

func (Date) String

func (d Date) String() string

func (Date) ToTime

func (d Date) ToTime() time.Time

time.Timeに変換

func (Date) Tommorow

func (d Date) Tommorow() Date

1日後のDateを返す

func (Date) Yesterday

func (d Date) Yesterday() Date

1日前のDateを返す

type NamedHoliday

type NamedHoliday int

祝日表現

func (NamedHoliday) String

func (h NamedHoliday) String() string

type Range

type Range struct {
	Start Date
	End   Date
}

Rangeは祝日の有効期間を表す

func NewRange

func NewRange(d1, d2 Date) Range

func (Range) Contains

func (r Range) Contains(d Date) (b bool)

Range.Containsは日付を引数にとって範囲にあればtrue otherwise false

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL