├── .github ├── CODEOWNERS └── workflows │ ├── release.yml │ ├── test.yml │ └── update.yml ├── .gitignore ├── .goreleaser.yml ├── LICENSE ├── README.md ├── cli.go ├── cli_test.go ├── cmd └── shukujitsu │ └── main.go ├── dates.go ├── go.mod ├── go.sum ├── internal └── gen │ └── gen.go ├── shukujitsu.go └── shukujitsu_test.go /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | /dates.go @soh335 @Songmu 2 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | 3 | on: 4 | push: 5 | branches: 6 | - "!**/*" 7 | tags: 8 | - "v*.*.*" 9 | 10 | jobs: 11 | goreleaser: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@v3 16 | with: 17 | fetch-depth: 0 18 | - name: Set up Go 19 | uses: actions/setup-go@v3 20 | with: 21 | go-version: 1.19 22 | - name: Run GoReleaser 23 | uses: goreleaser/goreleaser-action@v4 24 | with: 25 | version: latest 26 | args: release --clean 27 | env: 28 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 29 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | test: 6 | name: test 7 | runs-on: ubuntu-latest 8 | strategy: 9 | matrix: 10 | go: 11 | - "1.23" 12 | 13 | steps: 14 | - name: checkout 15 | uses: actions/checkout@v2 16 | - name: Setup go ${{ matrix.go }} 17 | uses: actions/setup-go@v2 18 | with: 19 | go-version: ${{ matrix.go }} 20 | - name: test 21 | run: go test -v ./... 22 | -------------------------------------------------------------------------------- /.github/workflows/update.yml: -------------------------------------------------------------------------------- 1 | name: update 2 | on: 3 | schedule: 4 | - cron: "0 0 * * 1" 5 | workflow_dispatch: 6 | 7 | jobs: 8 | test: 9 | name: update 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: setup go 13 | uses: actions/setup-go@v2 14 | with: 15 | go-version: 1.23 16 | - name: Check out code 17 | uses: actions/checkout@v2 18 | - name: update 19 | run: | 20 | go run ./internal/gen/gen.go 21 | git diff --exit-code --quiet && exit 22 | git add dates.go 23 | git config --global user.email sugarbabe335@gmail.com 24 | git config --global user.name soh335 25 | git commit -m 'update dates.go' 26 | - name: Create Pull Request 27 | uses: peter-evans/create-pull-request@v3 28 | with: 29 | title: update dates.go 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | syukujitsu.csv 2 | dist/* 3 | -------------------------------------------------------------------------------- /.goreleaser.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | before: 3 | hooks: 4 | - go mod download 5 | builds: 6 | - env: 7 | - CGO_ENABLED=0 8 | main: ./cmd/shukujitsu/main.go 9 | ldflags: 10 | - -s -w -X main.version={{.Version}} 11 | goos: 12 | - darwin 13 | - linux 14 | goarch: 15 | - amd64 16 | - arm64 17 | archives: 18 | checksum: 19 | name_template: "checksums.txt" 20 | snapshot: 21 | version_template: "{{ .Tag }}-next" 22 | changelog: 23 | sort: asc 24 | filters: 25 | exclude: 26 | - "^docs:" 27 | - "^test:" 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 soh335 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # shukujitsu 2 | 3 | [![PkgGoDev](https://pkg.go.dev/badge/github.com/soh335/shukujitsu)](https://pkg.go.dev/github.com/soh335/shukujitsu) ![test](https://github.com/soh335/shukujitsu/workflows/test/badge.svg) 4 | 5 | shukujitsu determines japanese holiday. 6 | Holidays are collected from https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv 7 | 8 | When csv is updated, you can updated as follow command. 9 | 10 | ``` 11 | $ go run ./internal/gen/gen.go 12 | ``` 13 | 14 | Currently, we check it per week at [here](https://github.com/soh335/shukujitsu/actions?query=workflow%3Aupdate). 15 | 16 | ## HOW TO USE 17 | 18 | ```go 19 | if shukujitsu.IsShukujitsu(time.Now()) { 20 | fmt.Println("shukujitsu!") 21 | } 22 | ``` 23 | -------------------------------------------------------------------------------- /cli.go: -------------------------------------------------------------------------------- 1 | package shukujitsu 2 | 3 | import ( 4 | "fmt" 5 | "io" 6 | "time" 7 | ) 8 | 9 | // CLIOption represents an option for CLI. 10 | type CLIOption struct { 11 | Quiet bool 12 | Date string 13 | DateFormat string 14 | Writer io.Writer 15 | } 16 | 17 | // RunCLI runs shukujitsu CLI. 18 | // return values 19 | // 0 : is Shukujitsu 20 | // 1 : is not Shukujitsu 21 | // 2 : parse error of -d (date) 22 | func RunCLI(opt *CLIOption) int { 23 | var ( 24 | now time.Time 25 | err error 26 | ) 27 | if opt.Date == "" { 28 | now = time.Now() 29 | } else { 30 | now, err = time.Parse(opt.DateFormat, opt.Date) 31 | if err != nil { 32 | fmt.Fprintln(opt.Writer, err) 33 | return 2 34 | } 35 | } 36 | 37 | name, ok := dates[now.Format("2006/1/2")] 38 | if !opt.Quiet { 39 | fmt.Fprintln(opt.Writer, now.Format(opt.DateFormat), name) 40 | } 41 | if !ok { 42 | return 1 43 | } 44 | return 0 45 | } 46 | -------------------------------------------------------------------------------- /cli_test.go: -------------------------------------------------------------------------------- 1 | package shukujitsu 2 | 3 | import ( 4 | "bytes" 5 | "os" 6 | "strings" 7 | "testing" 8 | ) 9 | 10 | var cliTestCases = []struct { 11 | quiet bool 12 | date string 13 | output string 14 | code int 15 | }{ 16 | { 17 | quiet: false, 18 | date: "2021-01-01", 19 | output: "2021-01-01 元日", 20 | code: 0, 21 | }, 22 | { 23 | quiet: false, 24 | date: "2021-01-02", 25 | output: "2021-01-02 ", 26 | code: 1, 27 | }, 28 | { 29 | quiet: false, 30 | date: "2021-01-0x", 31 | output: `parsing time "2021-01-0x" as "2006-01-02": cannot parse "0x" as "02"`, 32 | code: 2, 33 | }, 34 | { 35 | quiet: true, 36 | date: "2021-01-01", 37 | output: "", 38 | code: 0, 39 | }, 40 | { 41 | quiet: true, 42 | date: "2021-01-02", 43 | output: "", 44 | code: 1, 45 | }, 46 | { 47 | quiet: true, 48 | date: "2021-01-0x", 49 | output: `parsing time "2021-01-0x" as "2006-01-02": cannot parse "0x" as "02"`, 50 | code: 2, 51 | }, 52 | } 53 | 54 | func TestCLI(t *testing.T) { 55 | stdout := os.Stdout 56 | defer func() { 57 | os.Stdout = stdout 58 | }() 59 | for _, c := range cliTestCases { 60 | var b []byte 61 | buf := bytes.NewBuffer(b) 62 | code := RunCLI(&CLIOption{ 63 | Quiet: c.quiet, 64 | Date: c.date, 65 | DateFormat: "2006-01-02", 66 | Writer: buf, 67 | }) 68 | if code != c.code { 69 | t.Errorf("unexpected code %d %v", code, c) 70 | } 71 | output := strings.TrimRight(buf.String(), "\n") 72 | if output != c.output { 73 | t.Errorf("unexpected output %s %v", output, c) 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /cmd/shukujitsu/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "flag" 5 | "fmt" 6 | "os" 7 | 8 | "github.com/soh335/shukujitsu" 9 | ) 10 | 11 | var ( 12 | quiet bool 13 | date string 14 | dateFormat = "2006-01-02" 15 | showVersion bool 16 | version = "current" 17 | ) 18 | 19 | func init() { 20 | flag.BoolVar(&quiet, "quiet", false, "quiet") 21 | flag.StringVar(&date, "date", "", "date (format "+dateFormat+")") 22 | flag.BoolVar(&showVersion, "version", false, "show version") 23 | } 24 | 25 | func main() { 26 | flag.Parse() 27 | if showVersion { 28 | fmt.Println("shukujitsu", version) 29 | return 30 | } 31 | code := shukujitsu.RunCLI(&shukujitsu.CLIOption{ 32 | Quiet: quiet, 33 | Date: date, 34 | DateFormat: dateFormat, 35 | Writer: os.Stdout, 36 | }) 37 | os.Exit(code) 38 | } 39 | -------------------------------------------------------------------------------- /dates.go: -------------------------------------------------------------------------------- 1 | // Code generated by internal/gen/gen.go; DO NOT EDIT. 2 | package shukujitsu 3 | 4 | var dates = map[string]string{ 5 | "1955/1/1": "元日", 6 | "1955/1/15": "成人の日", 7 | "1955/3/21": "春分の日", 8 | "1955/4/29": "天皇誕生日", 9 | "1955/5/3": "憲法記念日", 10 | "1955/5/5": "こどもの日", 11 | "1955/9/24": "秋分の日", 12 | "1955/11/3": "文化の日", 13 | "1955/11/23": "勤労感謝の日", 14 | "1956/1/1": "元日", 15 | "1956/1/15": "成人の日", 16 | "1956/3/21": "春分の日", 17 | "1956/4/29": "天皇誕生日", 18 | "1956/5/3": "憲法記念日", 19 | "1956/5/5": "こどもの日", 20 | "1956/9/23": "秋分の日", 21 | "1956/11/3": "文化の日", 22 | "1956/11/23": "勤労感謝の日", 23 | "1957/1/1": "元日", 24 | "1957/1/15": "成人の日", 25 | "1957/3/21": "春分の日", 26 | "1957/4/29": "天皇誕生日", 27 | "1957/5/3": "憲法記念日", 28 | "1957/5/5": "こどもの日", 29 | "1957/9/23": "秋分の日", 30 | "1957/11/3": "文化の日", 31 | "1957/11/23": "勤労感謝の日", 32 | "1958/1/1": "元日", 33 | "1958/1/15": "成人の日", 34 | "1958/3/21": "春分の日", 35 | "1958/4/29": "天皇誕生日", 36 | "1958/5/3": "憲法記念日", 37 | "1958/5/5": "こどもの日", 38 | "1958/9/23": "秋分の日", 39 | "1958/11/3": "文化の日", 40 | "1958/11/23": "勤労感謝の日", 41 | "1959/1/1": "元日", 42 | "1959/1/15": "成人の日", 43 | "1959/3/21": "春分の日", 44 | "1959/4/10": "結婚の儀", 45 | "1959/4/29": "天皇誕生日", 46 | "1959/5/3": "憲法記念日", 47 | "1959/5/5": "こどもの日", 48 | "1959/9/24": "秋分の日", 49 | "1959/11/3": "文化の日", 50 | "1959/11/23": "勤労感謝の日", 51 | "1960/1/1": "元日", 52 | "1960/1/15": "成人の日", 53 | "1960/3/20": "春分の日", 54 | "1960/4/29": "天皇誕生日", 55 | "1960/5/3": "憲法記念日", 56 | "1960/5/5": "こどもの日", 57 | "1960/9/23": "秋分の日", 58 | "1960/11/3": "文化の日", 59 | "1960/11/23": "勤労感謝の日", 60 | "1961/1/1": "元日", 61 | "1961/1/15": "成人の日", 62 | "1961/3/21": "春分の日", 63 | "1961/4/29": "天皇誕生日", 64 | "1961/5/3": "憲法記念日", 65 | "1961/5/5": "こどもの日", 66 | "1961/9/23": "秋分の日", 67 | "1961/11/3": "文化の日", 68 | "1961/11/23": "勤労感謝の日", 69 | "1962/1/1": "元日", 70 | "1962/1/15": "成人の日", 71 | "1962/3/21": "春分の日", 72 | "1962/4/29": "天皇誕生日", 73 | "1962/5/3": "憲法記念日", 74 | "1962/5/5": "こどもの日", 75 | "1962/9/23": "秋分の日", 76 | "1962/11/3": "文化の日", 77 | "1962/11/23": "勤労感謝の日", 78 | "1963/1/1": "元日", 79 | "1963/1/15": "成人の日", 80 | "1963/3/21": "春分の日", 81 | "1963/4/29": "天皇誕生日", 82 | "1963/5/3": "憲法記念日", 83 | "1963/5/5": "こどもの日", 84 | "1963/9/24": "秋分の日", 85 | "1963/11/3": "文化の日", 86 | "1963/11/23": "勤労感謝の日", 87 | "1964/1/1": "元日", 88 | "1964/1/15": "成人の日", 89 | "1964/3/20": "春分の日", 90 | "1964/4/29": "天皇誕生日", 91 | "1964/5/3": "憲法記念日", 92 | "1964/5/5": "こどもの日", 93 | "1964/9/23": "秋分の日", 94 | "1964/11/3": "文化の日", 95 | "1964/11/23": "勤労感謝の日", 96 | "1965/1/1": "元日", 97 | "1965/1/15": "成人の日", 98 | "1965/3/21": "春分の日", 99 | "1965/4/29": "天皇誕生日", 100 | "1965/5/3": "憲法記念日", 101 | "1965/5/5": "こどもの日", 102 | "1965/9/23": "秋分の日", 103 | "1965/11/3": "文化の日", 104 | "1965/11/23": "勤労感謝の日", 105 | "1966/1/1": "元日", 106 | "1966/1/15": "成人の日", 107 | "1966/3/21": "春分の日", 108 | "1966/4/29": "天皇誕生日", 109 | "1966/5/3": "憲法記念日", 110 | "1966/5/5": "こどもの日", 111 | "1966/9/15": "敬老の日", 112 | "1966/9/23": "秋分の日", 113 | "1966/10/10": "体育の日", 114 | "1966/11/3": "文化の日", 115 | "1966/11/23": "勤労感謝の日", 116 | "1967/1/1": "元日", 117 | "1967/1/15": "成人の日", 118 | "1967/2/11": "建国記念の日", 119 | "1967/3/21": "春分の日", 120 | "1967/4/29": "天皇誕生日", 121 | "1967/5/3": "憲法記念日", 122 | "1967/5/5": "こどもの日", 123 | "1967/9/15": "敬老の日", 124 | "1967/9/24": "秋分の日", 125 | "1967/10/10": "体育の日", 126 | "1967/11/3": "文化の日", 127 | "1967/11/23": "勤労感謝の日", 128 | "1968/1/1": "元日", 129 | "1968/1/15": "成人の日", 130 | "1968/2/11": "建国記念の日", 131 | "1968/3/20": "春分の日", 132 | "1968/4/29": "天皇誕生日", 133 | "1968/5/3": "憲法記念日", 134 | "1968/5/5": "こどもの日", 135 | "1968/9/15": "敬老の日", 136 | "1968/9/23": "秋分の日", 137 | "1968/10/10": "体育の日", 138 | "1968/11/3": "文化の日", 139 | "1968/11/23": "勤労感謝の日", 140 | "1969/1/1": "元日", 141 | "1969/1/15": "成人の日", 142 | "1969/2/11": "建国記念の日", 143 | "1969/3/21": "春分の日", 144 | "1969/4/29": "天皇誕生日", 145 | "1969/5/3": "憲法記念日", 146 | "1969/5/5": "こどもの日", 147 | "1969/9/15": "敬老の日", 148 | "1969/9/23": "秋分の日", 149 | "1969/10/10": "体育の日", 150 | "1969/11/3": "文化の日", 151 | "1969/11/23": "勤労感謝の日", 152 | "1970/1/1": "元日", 153 | "1970/1/15": "成人の日", 154 | "1970/2/11": "建国記念の日", 155 | "1970/3/21": "春分の日", 156 | "1970/4/29": "天皇誕生日", 157 | "1970/5/3": "憲法記念日", 158 | "1970/5/5": "こどもの日", 159 | "1970/9/15": "敬老の日", 160 | "1970/9/23": "秋分の日", 161 | "1970/10/10": "体育の日", 162 | "1970/11/3": "文化の日", 163 | "1970/11/23": "勤労感謝の日", 164 | "1971/1/1": "元日", 165 | "1971/1/15": "成人の日", 166 | "1971/2/11": "建国記念の日", 167 | "1971/3/21": "春分の日", 168 | "1971/4/29": "天皇誕生日", 169 | "1971/5/3": "憲法記念日", 170 | "1971/5/5": "こどもの日", 171 | "1971/9/15": "敬老の日", 172 | "1971/9/24": "秋分の日", 173 | "1971/10/10": "体育の日", 174 | "1971/11/3": "文化の日", 175 | "1971/11/23": "勤労感謝の日", 176 | "1972/1/1": "元日", 177 | "1972/1/15": "成人の日", 178 | "1972/2/11": "建国記念の日", 179 | "1972/3/20": "春分の日", 180 | "1972/4/29": "天皇誕生日", 181 | "1972/5/3": "憲法記念日", 182 | "1972/5/5": "こどもの日", 183 | "1972/9/15": "敬老の日", 184 | "1972/9/23": "秋分の日", 185 | "1972/10/10": "体育の日", 186 | "1972/11/3": "文化の日", 187 | "1972/11/23": "勤労感謝の日", 188 | "1973/1/1": "元日", 189 | "1973/1/15": "成人の日", 190 | "1973/2/11": "建国記念の日", 191 | "1973/3/21": "春分の日", 192 | "1973/4/29": "天皇誕生日", 193 | "1973/4/30": "休日", 194 | "1973/5/3": "憲法記念日", 195 | "1973/5/5": "こどもの日", 196 | "1973/9/15": "敬老の日", 197 | "1973/9/23": "秋分の日", 198 | "1973/9/24": "休日", 199 | "1973/10/10": "体育の日", 200 | "1973/11/3": "文化の日", 201 | "1973/11/23": "勤労感謝の日", 202 | "1974/1/1": "元日", 203 | "1974/1/15": "成人の日", 204 | "1974/2/11": "建国記念の日", 205 | "1974/3/21": "春分の日", 206 | "1974/4/29": "天皇誕生日", 207 | "1974/5/3": "憲法記念日", 208 | "1974/5/5": "こどもの日", 209 | "1974/5/6": "休日", 210 | "1974/9/15": "敬老の日", 211 | "1974/9/16": "休日", 212 | "1974/9/23": "秋分の日", 213 | "1974/10/10": "体育の日", 214 | "1974/11/3": "文化の日", 215 | "1974/11/4": "休日", 216 | "1974/11/23": "勤労感謝の日", 217 | "1975/1/1": "元日", 218 | "1975/1/15": "成人の日", 219 | "1975/2/11": "建国記念の日", 220 | "1975/3/21": "春分の日", 221 | "1975/4/29": "天皇誕生日", 222 | "1975/5/3": "憲法記念日", 223 | "1975/5/5": "こどもの日", 224 | "1975/9/15": "敬老の日", 225 | "1975/9/24": "秋分の日", 226 | "1975/10/10": "体育の日", 227 | "1975/11/3": "文化の日", 228 | "1975/11/23": "勤労感謝の日", 229 | "1975/11/24": "休日", 230 | "1976/1/1": "元日", 231 | "1976/1/15": "成人の日", 232 | "1976/2/11": "建国記念の日", 233 | "1976/3/20": "春分の日", 234 | "1976/4/29": "天皇誕生日", 235 | "1976/5/3": "憲法記念日", 236 | "1976/5/5": "こどもの日", 237 | "1976/9/15": "敬老の日", 238 | "1976/9/23": "秋分の日", 239 | "1976/10/10": "体育の日", 240 | "1976/10/11": "休日", 241 | "1976/11/3": "文化の日", 242 | "1976/11/23": "勤労感謝の日", 243 | "1977/1/1": "元日", 244 | "1977/1/15": "成人の日", 245 | "1977/2/11": "建国記念の日", 246 | "1977/3/21": "春分の日", 247 | "1977/4/29": "天皇誕生日", 248 | "1977/5/3": "憲法記念日", 249 | "1977/5/5": "こどもの日", 250 | "1977/9/15": "敬老の日", 251 | "1977/9/23": "秋分の日", 252 | "1977/10/10": "体育の日", 253 | "1977/11/3": "文化の日", 254 | "1977/11/23": "勤労感謝の日", 255 | "1978/1/1": "元日", 256 | "1978/1/2": "休日", 257 | "1978/1/15": "成人の日", 258 | "1978/1/16": "休日", 259 | "1978/2/11": "建国記念の日", 260 | "1978/3/21": "春分の日", 261 | "1978/4/29": "天皇誕生日", 262 | "1978/5/3": "憲法記念日", 263 | "1978/5/5": "こどもの日", 264 | "1978/9/15": "敬老の日", 265 | "1978/9/23": "秋分の日", 266 | "1978/10/10": "体育の日", 267 | "1978/11/3": "文化の日", 268 | "1978/11/23": "勤労感謝の日", 269 | "1979/1/1": "元日", 270 | "1979/1/15": "成人の日", 271 | "1979/2/11": "建国記念の日", 272 | "1979/2/12": "休日", 273 | "1979/3/21": "春分の日", 274 | "1979/4/29": "天皇誕生日", 275 | "1979/4/30": "休日", 276 | "1979/5/3": "憲法記念日", 277 | "1979/5/5": "こどもの日", 278 | "1979/9/15": "敬老の日", 279 | "1979/9/24": "秋分の日", 280 | "1979/10/10": "体育の日", 281 | "1979/11/3": "文化の日", 282 | "1979/11/23": "勤労感謝の日", 283 | "1980/1/1": "元日", 284 | "1980/1/15": "成人の日", 285 | "1980/2/11": "建国記念の日", 286 | "1980/3/20": "春分の日", 287 | "1980/4/29": "天皇誕生日", 288 | "1980/5/3": "憲法記念日", 289 | "1980/5/5": "こどもの日", 290 | "1980/9/15": "敬老の日", 291 | "1980/9/23": "秋分の日", 292 | "1980/10/10": "体育の日", 293 | "1980/11/3": "文化の日", 294 | "1980/11/23": "勤労感謝の日", 295 | "1980/11/24": "休日", 296 | "1981/1/1": "元日", 297 | "1981/1/15": "成人の日", 298 | "1981/2/11": "建国記念の日", 299 | "1981/3/21": "春分の日", 300 | "1981/4/29": "天皇誕生日", 301 | "1981/5/3": "憲法記念日", 302 | "1981/5/4": "休日", 303 | "1981/5/5": "こどもの日", 304 | "1981/9/15": "敬老の日", 305 | "1981/9/23": "秋分の日", 306 | "1981/10/10": "体育の日", 307 | "1981/11/3": "文化の日", 308 | "1981/11/23": "勤労感謝の日", 309 | "1982/1/1": "元日", 310 | "1982/1/15": "成人の日", 311 | "1982/2/11": "建国記念の日", 312 | "1982/3/21": "春分の日", 313 | "1982/3/22": "休日", 314 | "1982/4/29": "天皇誕生日", 315 | "1982/5/3": "憲法記念日", 316 | "1982/5/5": "こどもの日", 317 | "1982/9/15": "敬老の日", 318 | "1982/9/23": "秋分の日", 319 | "1982/10/10": "体育の日", 320 | "1982/10/11": "休日", 321 | "1982/11/3": "文化の日", 322 | "1982/11/23": "勤労感謝の日", 323 | "1983/1/1": "元日", 324 | "1983/1/15": "成人の日", 325 | "1983/2/11": "建国記念の日", 326 | "1983/3/21": "春分の日", 327 | "1983/4/29": "天皇誕生日", 328 | "1983/5/3": "憲法記念日", 329 | "1983/5/5": "こどもの日", 330 | "1983/9/15": "敬老の日", 331 | "1983/9/23": "秋分の日", 332 | "1983/10/10": "体育の日", 333 | "1983/11/3": "文化の日", 334 | "1983/11/23": "勤労感謝の日", 335 | "1984/1/1": "元日", 336 | "1984/1/2": "休日", 337 | "1984/1/15": "成人の日", 338 | "1984/1/16": "休日", 339 | "1984/2/11": "建国記念の日", 340 | "1984/3/20": "春分の日", 341 | "1984/4/29": "天皇誕生日", 342 | "1984/4/30": "休日", 343 | "1984/5/3": "憲法記念日", 344 | "1984/5/5": "こどもの日", 345 | "1984/9/15": "敬老の日", 346 | "1984/9/23": "秋分の日", 347 | "1984/9/24": "休日", 348 | "1984/10/10": "体育の日", 349 | "1984/11/3": "文化の日", 350 | "1984/11/23": "勤労感謝の日", 351 | "1985/1/1": "元日", 352 | "1985/1/15": "成人の日", 353 | "1985/2/11": "建国記念の日", 354 | "1985/3/21": "春分の日", 355 | "1985/4/29": "天皇誕生日", 356 | "1985/5/3": "憲法記念日", 357 | "1985/5/5": "こどもの日", 358 | "1985/5/6": "休日", 359 | "1985/9/15": "敬老の日", 360 | "1985/9/16": "休日", 361 | "1985/9/23": "秋分の日", 362 | "1985/10/10": "体育の日", 363 | "1985/11/3": "文化の日", 364 | "1985/11/4": "休日", 365 | "1985/11/23": "勤労感謝の日", 366 | "1986/1/1": "元日", 367 | "1986/1/15": "成人の日", 368 | "1986/2/11": "建国記念の日", 369 | "1986/3/21": "春分の日", 370 | "1986/4/29": "天皇誕生日", 371 | "1986/5/3": "憲法記念日", 372 | "1986/5/5": "こどもの日", 373 | "1986/9/15": "敬老の日", 374 | "1986/9/23": "秋分の日", 375 | "1986/10/10": "体育の日", 376 | "1986/11/3": "文化の日", 377 | "1986/11/23": "勤労感謝の日", 378 | "1986/11/24": "休日", 379 | "1987/1/1": "元日", 380 | "1987/1/15": "成人の日", 381 | "1987/2/11": "建国記念の日", 382 | "1987/3/21": "春分の日", 383 | "1987/4/29": "天皇誕生日", 384 | "1987/5/3": "憲法記念日", 385 | "1987/5/4": "休日", 386 | "1987/5/5": "こどもの日", 387 | "1987/9/15": "敬老の日", 388 | "1987/9/23": "秋分の日", 389 | "1987/10/10": "体育の日", 390 | "1987/11/3": "文化の日", 391 | "1987/11/23": "勤労感謝の日", 392 | "1988/1/1": "元日", 393 | "1988/1/15": "成人の日", 394 | "1988/2/11": "建国記念の日", 395 | "1988/3/20": "春分の日", 396 | "1988/3/21": "休日", 397 | "1988/4/29": "天皇誕生日", 398 | "1988/5/3": "憲法記念日", 399 | "1988/5/4": "休日", 400 | "1988/5/5": "こどもの日", 401 | "1988/9/15": "敬老の日", 402 | "1988/9/23": "秋分の日", 403 | "1988/10/10": "体育の日", 404 | "1988/11/3": "文化の日", 405 | "1988/11/23": "勤労感謝の日", 406 | "1989/1/1": "元日", 407 | "1989/1/2": "休日", 408 | "1989/1/15": "成人の日", 409 | "1989/1/16": "休日", 410 | "1989/2/11": "建国記念の日", 411 | "1989/2/24": "大喪の礼", 412 | "1989/3/21": "春分の日", 413 | "1989/4/29": "みどりの日", 414 | "1989/5/3": "憲法記念日", 415 | "1989/5/4": "休日", 416 | "1989/5/5": "こどもの日", 417 | "1989/9/15": "敬老の日", 418 | "1989/9/23": "秋分の日", 419 | "1989/10/10": "体育の日", 420 | "1989/11/3": "文化の日", 421 | "1989/11/23": "勤労感謝の日", 422 | "1989/12/23": "天皇誕生日", 423 | "1990/1/1": "元日", 424 | "1990/1/15": "成人の日", 425 | "1990/2/11": "建国記念の日", 426 | "1990/2/12": "休日", 427 | "1990/3/21": "春分の日", 428 | "1990/4/29": "みどりの日", 429 | "1990/4/30": "休日", 430 | "1990/5/3": "憲法記念日", 431 | "1990/5/4": "休日", 432 | "1990/5/5": "こどもの日", 433 | "1990/9/15": "敬老の日", 434 | "1990/9/23": "秋分の日", 435 | "1990/9/24": "休日", 436 | "1990/10/10": "体育の日", 437 | "1990/11/3": "文化の日", 438 | "1990/11/12": "即位礼正殿の儀", 439 | "1990/11/23": "勤労感謝の日", 440 | "1990/12/23": "天皇誕生日", 441 | "1990/12/24": "休日", 442 | "1991/1/1": "元日", 443 | "1991/1/15": "成人の日", 444 | "1991/2/11": "建国記念の日", 445 | "1991/3/21": "春分の日", 446 | "1991/4/29": "みどりの日", 447 | "1991/5/3": "憲法記念日", 448 | "1991/5/4": "休日", 449 | "1991/5/5": "こどもの日", 450 | "1991/5/6": "休日", 451 | "1991/9/15": "敬老の日", 452 | "1991/9/16": "休日", 453 | "1991/9/23": "秋分の日", 454 | "1991/10/10": "体育の日", 455 | "1991/11/3": "文化の日", 456 | "1991/11/4": "休日", 457 | "1991/11/23": "勤労感謝の日", 458 | "1991/12/23": "天皇誕生日", 459 | "1992/1/1": "元日", 460 | "1992/1/15": "成人の日", 461 | "1992/2/11": "建国記念の日", 462 | "1992/3/20": "春分の日", 463 | "1992/4/29": "みどりの日", 464 | "1992/5/3": "憲法記念日", 465 | "1992/5/4": "休日", 466 | "1992/5/5": "こどもの日", 467 | "1992/9/15": "敬老の日", 468 | "1992/9/23": "秋分の日", 469 | "1992/10/10": "体育の日", 470 | "1992/11/3": "文化の日", 471 | "1992/11/23": "勤労感謝の日", 472 | "1992/12/23": "天皇誕生日", 473 | "1993/1/1": "元日", 474 | "1993/1/15": "成人の日", 475 | "1993/2/11": "建国記念の日", 476 | "1993/3/20": "春分の日", 477 | "1993/4/29": "みどりの日", 478 | "1993/5/3": "憲法記念日", 479 | "1993/5/4": "休日", 480 | "1993/5/5": "こどもの日", 481 | "1993/6/9": "結婚の儀", 482 | "1993/9/15": "敬老の日", 483 | "1993/9/23": "秋分の日", 484 | "1993/10/10": "体育の日", 485 | "1993/10/11": "休日", 486 | "1993/11/3": "文化の日", 487 | "1993/11/23": "勤労感謝の日", 488 | "1993/12/23": "天皇誕生日", 489 | "1994/1/1": "元日", 490 | "1994/1/15": "成人の日", 491 | "1994/2/11": "建国記念の日", 492 | "1994/3/21": "春分の日", 493 | "1994/4/29": "みどりの日", 494 | "1994/5/3": "憲法記念日", 495 | "1994/5/4": "休日", 496 | "1994/5/5": "こどもの日", 497 | "1994/9/15": "敬老の日", 498 | "1994/9/23": "秋分の日", 499 | "1994/10/10": "体育の日", 500 | "1994/11/3": "文化の日", 501 | "1994/11/23": "勤労感謝の日", 502 | "1994/12/23": "天皇誕生日", 503 | "1995/1/1": "元日", 504 | "1995/1/2": "休日", 505 | "1995/1/15": "成人の日", 506 | "1995/1/16": "休日", 507 | "1995/2/11": "建国記念の日", 508 | "1995/3/21": "春分の日", 509 | "1995/4/29": "みどりの日", 510 | "1995/5/3": "憲法記念日", 511 | "1995/5/4": "休日", 512 | "1995/5/5": "こどもの日", 513 | "1995/9/15": "敬老の日", 514 | "1995/9/23": "秋分の日", 515 | "1995/10/10": "体育の日", 516 | "1995/11/3": "文化の日", 517 | "1995/11/23": "勤労感謝の日", 518 | "1995/12/23": "天皇誕生日", 519 | "1996/1/1": "元日", 520 | "1996/1/15": "成人の日", 521 | "1996/2/11": "建国記念の日", 522 | "1996/2/12": "休日", 523 | "1996/3/20": "春分の日", 524 | "1996/4/29": "みどりの日", 525 | "1996/5/3": "憲法記念日", 526 | "1996/5/4": "休日", 527 | "1996/5/5": "こどもの日", 528 | "1996/5/6": "休日", 529 | "1996/7/20": "海の日", 530 | "1996/9/15": "敬老の日", 531 | "1996/9/16": "休日", 532 | "1996/9/23": "秋分の日", 533 | "1996/10/10": "体育の日", 534 | "1996/11/3": "文化の日", 535 | "1996/11/4": "休日", 536 | "1996/11/23": "勤労感謝の日", 537 | "1996/12/23": "天皇誕生日", 538 | "1997/1/1": "元日", 539 | "1997/1/15": "成人の日", 540 | "1997/2/11": "建国記念の日", 541 | "1997/3/20": "春分の日", 542 | "1997/4/29": "みどりの日", 543 | "1997/5/3": "憲法記念日", 544 | "1997/5/5": "こどもの日", 545 | "1997/7/20": "海の日", 546 | "1997/7/21": "休日", 547 | "1997/9/15": "敬老の日", 548 | "1997/9/23": "秋分の日", 549 | "1997/10/10": "体育の日", 550 | "1997/11/3": "文化の日", 551 | "1997/11/23": "勤労感謝の日", 552 | "1997/11/24": "休日", 553 | "1997/12/23": "天皇誕生日", 554 | "1998/1/1": "元日", 555 | "1998/1/15": "成人の日", 556 | "1998/2/11": "建国記念の日", 557 | "1998/3/21": "春分の日", 558 | "1998/4/29": "みどりの日", 559 | "1998/5/3": "憲法記念日", 560 | "1998/5/4": "休日", 561 | "1998/5/5": "こどもの日", 562 | "1998/7/20": "海の日", 563 | "1998/9/15": "敬老の日", 564 | "1998/9/23": "秋分の日", 565 | "1998/10/10": "体育の日", 566 | "1998/11/3": "文化の日", 567 | "1998/11/23": "勤労感謝の日", 568 | "1998/12/23": "天皇誕生日", 569 | "1999/1/1": "元日", 570 | "1999/1/15": "成人の日", 571 | "1999/2/11": "建国記念の日", 572 | "1999/3/21": "春分の日", 573 | "1999/3/22": "休日", 574 | "1999/4/29": "みどりの日", 575 | "1999/5/3": "憲法記念日", 576 | "1999/5/4": "休日", 577 | "1999/5/5": "こどもの日", 578 | "1999/7/20": "海の日", 579 | "1999/9/15": "敬老の日", 580 | "1999/9/23": "秋分の日", 581 | "1999/10/10": "体育の日", 582 | "1999/10/11": "休日", 583 | "1999/11/3": "文化の日", 584 | "1999/11/23": "勤労感謝の日", 585 | "1999/12/23": "天皇誕生日", 586 | "2000/1/1": "元日", 587 | "2000/1/10": "成人の日", 588 | "2000/2/11": "建国記念の日", 589 | "2000/3/20": "春分の日", 590 | "2000/4/29": "みどりの日", 591 | "2000/5/3": "憲法記念日", 592 | "2000/5/4": "休日", 593 | "2000/5/5": "こどもの日", 594 | "2000/7/20": "海の日", 595 | "2000/9/15": "敬老の日", 596 | "2000/9/23": "秋分の日", 597 | "2000/10/9": "体育の日", 598 | "2000/11/3": "文化の日", 599 | "2000/11/23": "勤労感謝の日", 600 | "2000/12/23": "天皇誕生日", 601 | "2001/1/1": "元日", 602 | "2001/1/8": "成人の日", 603 | "2001/2/11": "建国記念の日", 604 | "2001/2/12": "休日", 605 | "2001/3/20": "春分の日", 606 | "2001/4/29": "みどりの日", 607 | "2001/4/30": "休日", 608 | "2001/5/3": "憲法記念日", 609 | "2001/5/4": "休日", 610 | "2001/5/5": "こどもの日", 611 | "2001/7/20": "海の日", 612 | "2001/9/15": "敬老の日", 613 | "2001/9/23": "秋分の日", 614 | "2001/9/24": "休日", 615 | "2001/10/8": "体育の日", 616 | "2001/11/3": "文化の日", 617 | "2001/11/23": "勤労感謝の日", 618 | "2001/12/23": "天皇誕生日", 619 | "2001/12/24": "休日", 620 | "2002/1/1": "元日", 621 | "2002/1/14": "成人の日", 622 | "2002/2/11": "建国記念の日", 623 | "2002/3/21": "春分の日", 624 | "2002/4/29": "みどりの日", 625 | "2002/5/3": "憲法記念日", 626 | "2002/5/4": "休日", 627 | "2002/5/5": "こどもの日", 628 | "2002/5/6": "休日", 629 | "2002/7/20": "海の日", 630 | "2002/9/15": "敬老の日", 631 | "2002/9/16": "休日", 632 | "2002/9/23": "秋分の日", 633 | "2002/10/14": "体育の日", 634 | "2002/11/3": "文化の日", 635 | "2002/11/4": "休日", 636 | "2002/11/23": "勤労感謝の日", 637 | "2002/12/23": "天皇誕生日", 638 | "2003/1/1": "元日", 639 | "2003/1/13": "成人の日", 640 | "2003/2/11": "建国記念の日", 641 | "2003/3/21": "春分の日", 642 | "2003/4/29": "みどりの日", 643 | "2003/5/3": "憲法記念日", 644 | "2003/5/5": "こどもの日", 645 | "2003/7/21": "海の日", 646 | "2003/9/15": "敬老の日", 647 | "2003/9/23": "秋分の日", 648 | "2003/10/13": "体育の日", 649 | "2003/11/3": "文化の日", 650 | "2003/11/23": "勤労感謝の日", 651 | "2003/11/24": "休日", 652 | "2003/12/23": "天皇誕生日", 653 | "2004/1/1": "元日", 654 | "2004/1/12": "成人の日", 655 | "2004/2/11": "建国記念の日", 656 | "2004/3/20": "春分の日", 657 | "2004/4/29": "みどりの日", 658 | "2004/5/3": "憲法記念日", 659 | "2004/5/4": "休日", 660 | "2004/5/5": "こどもの日", 661 | "2004/7/19": "海の日", 662 | "2004/9/20": "敬老の日", 663 | "2004/9/23": "秋分の日", 664 | "2004/10/11": "体育の日", 665 | "2004/11/3": "文化の日", 666 | "2004/11/23": "勤労感謝の日", 667 | "2004/12/23": "天皇誕生日", 668 | "2005/1/1": "元日", 669 | "2005/1/10": "成人の日", 670 | "2005/2/11": "建国記念の日", 671 | "2005/3/20": "春分の日", 672 | "2005/3/21": "休日", 673 | "2005/4/29": "みどりの日", 674 | "2005/5/3": "憲法記念日", 675 | "2005/5/4": "休日", 676 | "2005/5/5": "こどもの日", 677 | "2005/7/18": "海の日", 678 | "2005/9/19": "敬老の日", 679 | "2005/9/23": "秋分の日", 680 | "2005/10/10": "体育の日", 681 | "2005/11/3": "文化の日", 682 | "2005/11/23": "勤労感謝の日", 683 | "2005/12/23": "天皇誕生日", 684 | "2006/1/1": "元日", 685 | "2006/1/2": "休日", 686 | "2006/1/9": "成人の日", 687 | "2006/2/11": "建国記念の日", 688 | "2006/3/21": "春分の日", 689 | "2006/4/29": "みどりの日", 690 | "2006/5/3": "憲法記念日", 691 | "2006/5/4": "休日", 692 | "2006/5/5": "こどもの日", 693 | "2006/7/17": "海の日", 694 | "2006/9/18": "敬老の日", 695 | "2006/9/23": "秋分の日", 696 | "2006/10/9": "体育の日", 697 | "2006/11/3": "文化の日", 698 | "2006/11/23": "勤労感謝の日", 699 | "2006/12/23": "天皇誕生日", 700 | "2007/1/1": "元日", 701 | "2007/1/8": "成人の日", 702 | "2007/2/11": "建国記念の日", 703 | "2007/2/12": "休日", 704 | "2007/3/21": "春分の日", 705 | "2007/4/29": "昭和の日", 706 | "2007/4/30": "休日", 707 | "2007/5/3": "憲法記念日", 708 | "2007/5/4": "みどりの日", 709 | "2007/5/5": "こどもの日", 710 | "2007/7/16": "海の日", 711 | "2007/9/17": "敬老の日", 712 | "2007/9/23": "秋分の日", 713 | "2007/9/24": "休日", 714 | "2007/10/8": "体育の日", 715 | "2007/11/3": "文化の日", 716 | "2007/11/23": "勤労感謝の日", 717 | "2007/12/23": "天皇誕生日", 718 | "2007/12/24": "休日", 719 | "2008/1/1": "元日", 720 | "2008/1/14": "成人の日", 721 | "2008/2/11": "建国記念の日", 722 | "2008/3/20": "春分の日", 723 | "2008/4/29": "昭和の日", 724 | "2008/5/3": "憲法記念日", 725 | "2008/5/4": "みどりの日", 726 | "2008/5/5": "こどもの日", 727 | "2008/5/6": "休日", 728 | "2008/7/21": "海の日", 729 | "2008/9/15": "敬老の日", 730 | "2008/9/23": "秋分の日", 731 | "2008/10/13": "体育の日", 732 | "2008/11/3": "文化の日", 733 | "2008/11/23": "勤労感謝の日", 734 | "2008/11/24": "休日", 735 | "2008/12/23": "天皇誕生日", 736 | "2009/1/1": "元日", 737 | "2009/1/12": "成人の日", 738 | "2009/2/11": "建国記念の日", 739 | "2009/3/20": "春分の日", 740 | "2009/4/29": "昭和の日", 741 | "2009/5/3": "憲法記念日", 742 | "2009/5/4": "みどりの日", 743 | "2009/5/5": "こどもの日", 744 | "2009/5/6": "休日", 745 | "2009/7/20": "海の日", 746 | "2009/9/21": "敬老の日", 747 | "2009/9/22": "休日", 748 | "2009/9/23": "秋分の日", 749 | "2009/10/12": "体育の日", 750 | "2009/11/3": "文化の日", 751 | "2009/11/23": "勤労感謝の日", 752 | "2009/12/23": "天皇誕生日", 753 | "2010/1/1": "元日", 754 | "2010/1/11": "成人の日", 755 | "2010/2/11": "建国記念の日", 756 | "2010/3/21": "春分の日", 757 | "2010/3/22": "休日", 758 | "2010/4/29": "昭和の日", 759 | "2010/5/3": "憲法記念日", 760 | "2010/5/4": "みどりの日", 761 | "2010/5/5": "こどもの日", 762 | "2010/7/19": "海の日", 763 | "2010/9/20": "敬老の日", 764 | "2010/9/23": "秋分の日", 765 | "2010/10/11": "体育の日", 766 | "2010/11/3": "文化の日", 767 | "2010/11/23": "勤労感謝の日", 768 | "2010/12/23": "天皇誕生日", 769 | "2011/1/1": "元日", 770 | "2011/1/10": "成人の日", 771 | "2011/2/11": "建国記念の日", 772 | "2011/3/21": "春分の日", 773 | "2011/4/29": "昭和の日", 774 | "2011/5/3": "憲法記念日", 775 | "2011/5/4": "みどりの日", 776 | "2011/5/5": "こどもの日", 777 | "2011/7/18": "海の日", 778 | "2011/9/19": "敬老の日", 779 | "2011/9/23": "秋分の日", 780 | "2011/10/10": "体育の日", 781 | "2011/11/3": "文化の日", 782 | "2011/11/23": "勤労感謝の日", 783 | "2011/12/23": "天皇誕生日", 784 | "2012/1/1": "元日", 785 | "2012/1/2": "休日", 786 | "2012/1/9": "成人の日", 787 | "2012/2/11": "建国記念の日", 788 | "2012/3/20": "春分の日", 789 | "2012/4/29": "昭和の日", 790 | "2012/4/30": "休日", 791 | "2012/5/3": "憲法記念日", 792 | "2012/5/4": "みどりの日", 793 | "2012/5/5": "こどもの日", 794 | "2012/7/16": "海の日", 795 | "2012/9/17": "敬老の日", 796 | "2012/9/22": "秋分の日", 797 | "2012/10/8": "体育の日", 798 | "2012/11/3": "文化の日", 799 | "2012/11/23": "勤労感謝の日", 800 | "2012/12/23": "天皇誕生日", 801 | "2012/12/24": "休日", 802 | "2013/1/1": "元日", 803 | "2013/1/14": "成人の日", 804 | "2013/2/11": "建国記念の日", 805 | "2013/3/20": "春分の日", 806 | "2013/4/29": "昭和の日", 807 | "2013/5/3": "憲法記念日", 808 | "2013/5/4": "みどりの日", 809 | "2013/5/5": "こどもの日", 810 | "2013/5/6": "休日", 811 | "2013/7/15": "海の日", 812 | "2013/9/16": "敬老の日", 813 | "2013/9/23": "秋分の日", 814 | "2013/10/14": "体育の日", 815 | "2013/11/3": "文化の日", 816 | "2013/11/4": "休日", 817 | "2013/11/23": "勤労感謝の日", 818 | "2013/12/23": "天皇誕生日", 819 | "2014/1/1": "元日", 820 | "2014/1/13": "成人の日", 821 | "2014/2/11": "建国記念の日", 822 | "2014/3/21": "春分の日", 823 | "2014/4/29": "昭和の日", 824 | "2014/5/3": "憲法記念日", 825 | "2014/5/4": "みどりの日", 826 | "2014/5/5": "こどもの日", 827 | "2014/5/6": "休日", 828 | "2014/7/21": "海の日", 829 | "2014/9/15": "敬老の日", 830 | "2014/9/23": "秋分の日", 831 | "2014/10/13": "体育の日", 832 | "2014/11/3": "文化の日", 833 | "2014/11/23": "勤労感謝の日", 834 | "2014/11/24": "休日", 835 | "2014/12/23": "天皇誕生日", 836 | "2015/1/1": "元日", 837 | "2015/1/12": "成人の日", 838 | "2015/2/11": "建国記念の日", 839 | "2015/3/21": "春分の日", 840 | "2015/4/29": "昭和の日", 841 | "2015/5/3": "憲法記念日", 842 | "2015/5/4": "みどりの日", 843 | "2015/5/5": "こどもの日", 844 | "2015/5/6": "休日", 845 | "2015/7/20": "海の日", 846 | "2015/9/21": "敬老の日", 847 | "2015/9/22": "休日", 848 | "2015/9/23": "秋分の日", 849 | "2015/10/12": "体育の日", 850 | "2015/11/3": "文化の日", 851 | "2015/11/23": "勤労感謝の日", 852 | "2015/12/23": "天皇誕生日", 853 | "2016/1/1": "元日", 854 | "2016/1/11": "成人の日", 855 | "2016/2/11": "建国記念の日", 856 | "2016/3/20": "春分の日", 857 | "2016/3/21": "休日", 858 | "2016/4/29": "昭和の日", 859 | "2016/5/3": "憲法記念日", 860 | "2016/5/4": "みどりの日", 861 | "2016/5/5": "こどもの日", 862 | "2016/7/18": "海の日", 863 | "2016/8/11": "山の日", 864 | "2016/9/19": "敬老の日", 865 | "2016/9/22": "秋分の日", 866 | "2016/10/10": "体育の日", 867 | "2016/11/3": "文化の日", 868 | "2016/11/23": "勤労感謝の日", 869 | "2016/12/23": "天皇誕生日", 870 | "2017/1/1": "元日", 871 | "2017/1/2": "休日", 872 | "2017/1/9": "成人の日", 873 | "2017/2/11": "建国記念の日", 874 | "2017/3/20": "春分の日", 875 | "2017/4/29": "昭和の日", 876 | "2017/5/3": "憲法記念日", 877 | "2017/5/4": "みどりの日", 878 | "2017/5/5": "こどもの日", 879 | "2017/7/17": "海の日", 880 | "2017/8/11": "山の日", 881 | "2017/9/18": "敬老の日", 882 | "2017/9/23": "秋分の日", 883 | "2017/10/9": "体育の日", 884 | "2017/11/3": "文化の日", 885 | "2017/11/23": "勤労感謝の日", 886 | "2017/12/23": "天皇誕生日", 887 | "2018/1/1": "元日", 888 | "2018/1/8": "成人の日", 889 | "2018/2/11": "建国記念の日", 890 | "2018/2/12": "休日", 891 | "2018/3/21": "春分の日", 892 | "2018/4/29": "昭和の日", 893 | "2018/4/30": "休日", 894 | "2018/5/3": "憲法記念日", 895 | "2018/5/4": "みどりの日", 896 | "2018/5/5": "こどもの日", 897 | "2018/7/16": "海の日", 898 | "2018/8/11": "山の日", 899 | "2018/9/17": "敬老の日", 900 | "2018/9/23": "秋分の日", 901 | "2018/9/24": "休日", 902 | "2018/10/8": "体育の日", 903 | "2018/11/3": "文化の日", 904 | "2018/11/23": "勤労感謝の日", 905 | "2018/12/23": "天皇誕生日", 906 | "2018/12/24": "休日", 907 | "2019/1/1": "元日", 908 | "2019/1/14": "成人の日", 909 | "2019/2/11": "建国記念の日", 910 | "2019/3/21": "春分の日", 911 | "2019/4/29": "昭和の日", 912 | "2019/4/30": "休日", 913 | "2019/5/1": "休日(祝日扱い)", 914 | "2019/5/2": "休日", 915 | "2019/5/3": "憲法記念日", 916 | "2019/5/4": "みどりの日", 917 | "2019/5/5": "こどもの日", 918 | "2019/5/6": "休日", 919 | "2019/7/15": "海の日", 920 | "2019/8/11": "山の日", 921 | "2019/8/12": "休日", 922 | "2019/9/16": "敬老の日", 923 | "2019/9/23": "秋分の日", 924 | "2019/10/14": "体育の日(スポーツの日)", 925 | "2019/10/22": "休日(祝日扱い)", 926 | "2019/11/3": "文化の日", 927 | "2019/11/4": "休日", 928 | "2019/11/23": "勤労感謝の日", 929 | "2020/1/1": "元日", 930 | "2020/1/13": "成人の日", 931 | "2020/2/11": "建国記念の日", 932 | "2020/2/23": "天皇誕生日", 933 | "2020/2/24": "休日", 934 | "2020/3/20": "春分の日", 935 | "2020/4/29": "昭和の日", 936 | "2020/5/3": "憲法記念日", 937 | "2020/5/4": "みどりの日", 938 | "2020/5/5": "こどもの日", 939 | "2020/5/6": "休日", 940 | "2020/7/23": "海の日", 941 | "2020/7/24": "スポーツの日", 942 | "2020/8/10": "山の日", 943 | "2020/9/21": "敬老の日", 944 | "2020/9/22": "秋分の日", 945 | "2020/11/3": "文化の日", 946 | "2020/11/23": "勤労感謝の日", 947 | "2021/1/1": "元日", 948 | "2021/1/11": "成人の日", 949 | "2021/2/11": "建国記念の日", 950 | "2021/2/23": "天皇誕生日", 951 | "2021/3/20": "春分の日", 952 | "2021/4/29": "昭和の日", 953 | "2021/5/3": "憲法記念日", 954 | "2021/5/4": "みどりの日", 955 | "2021/5/5": "こどもの日", 956 | "2021/7/22": "海の日", 957 | "2021/7/23": "スポーツの日", 958 | "2021/8/8": "山の日", 959 | "2021/8/9": "休日", 960 | "2021/9/20": "敬老の日", 961 | "2021/9/23": "秋分の日", 962 | "2021/11/3": "文化の日", 963 | "2021/11/23": "勤労感謝の日", 964 | "2022/1/1": "元日", 965 | "2022/1/10": "成人の日", 966 | "2022/2/11": "建国記念の日", 967 | "2022/2/23": "天皇誕生日", 968 | "2022/3/21": "春分の日", 969 | "2022/4/29": "昭和の日", 970 | "2022/5/3": "憲法記念日", 971 | "2022/5/4": "みどりの日", 972 | "2022/5/5": "こどもの日", 973 | "2022/7/18": "海の日", 974 | "2022/8/11": "山の日", 975 | "2022/9/19": "敬老の日", 976 | "2022/9/23": "秋分の日", 977 | "2022/10/10": "スポーツの日", 978 | "2022/11/3": "文化の日", 979 | "2022/11/23": "勤労感謝の日", 980 | "2023/1/1": "元日", 981 | "2023/1/2": "休日", 982 | "2023/1/9": "成人の日", 983 | "2023/2/11": "建国記念の日", 984 | "2023/2/23": "天皇誕生日", 985 | "2023/3/21": "春分の日", 986 | "2023/4/29": "昭和の日", 987 | "2023/5/3": "憲法記念日", 988 | "2023/5/4": "みどりの日", 989 | "2023/5/5": "こどもの日", 990 | "2023/7/17": "海の日", 991 | "2023/8/11": "山の日", 992 | "2023/9/18": "敬老の日", 993 | "2023/9/23": "秋分の日", 994 | "2023/10/9": "スポーツの日", 995 | "2023/11/3": "文化の日", 996 | "2023/11/23": "勤労感謝の日", 997 | "2024/1/1": "元日", 998 | "2024/1/8": "成人の日", 999 | "2024/2/11": "建国記念の日", 1000 | "2024/2/12": "休日", 1001 | "2024/2/23": "天皇誕生日", 1002 | "2024/3/20": "春分の日", 1003 | "2024/4/29": "昭和の日", 1004 | "2024/5/3": "憲法記念日", 1005 | "2024/5/4": "みどりの日", 1006 | "2024/5/5": "こどもの日", 1007 | "2024/5/6": "休日", 1008 | "2024/7/15": "海の日", 1009 | "2024/8/11": "山の日", 1010 | "2024/8/12": "休日", 1011 | "2024/9/16": "敬老の日", 1012 | "2024/9/22": "秋分の日", 1013 | "2024/9/23": "休日", 1014 | "2024/10/14": "スポーツの日", 1015 | "2024/11/3": "文化の日", 1016 | "2024/11/4": "休日", 1017 | "2024/11/23": "勤労感謝の日", 1018 | "2025/1/1": "元日", 1019 | "2025/1/13": "成人の日", 1020 | "2025/2/11": "建国記念の日", 1021 | "2025/2/23": "天皇誕生日", 1022 | "2025/2/24": "休日", 1023 | "2025/3/20": "春分の日", 1024 | "2025/4/29": "昭和の日", 1025 | "2025/5/3": "憲法記念日", 1026 | "2025/5/4": "みどりの日", 1027 | "2025/5/5": "こどもの日", 1028 | "2025/5/6": "休日", 1029 | "2025/7/21": "海の日", 1030 | "2025/8/11": "山の日", 1031 | "2025/9/15": "敬老の日", 1032 | "2025/9/23": "秋分の日", 1033 | "2025/10/13": "スポーツの日", 1034 | "2025/11/3": "文化の日", 1035 | "2025/11/23": "勤労感謝の日", 1036 | "2025/11/24": "休日", 1037 | "2026/1/1": "元日", 1038 | "2026/1/12": "成人の日", 1039 | "2026/2/11": "建国記念の日", 1040 | "2026/2/23": "天皇誕生日", 1041 | "2026/3/20": "春分の日", 1042 | "2026/4/29": "昭和の日", 1043 | "2026/5/3": "憲法記念日", 1044 | "2026/5/4": "みどりの日", 1045 | "2026/5/5": "こどもの日", 1046 | "2026/5/6": "休日", 1047 | "2026/7/20": "海の日", 1048 | "2026/8/11": "山の日", 1049 | "2026/9/21": "敬老の日", 1050 | "2026/9/22": "休日", 1051 | "2026/9/23": "秋分の日", 1052 | "2026/10/12": "スポーツの日", 1053 | "2026/11/3": "文化の日", 1054 | "2026/11/23": "勤労感謝の日", 1055 | } 1056 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/soh335/shukujitsu 2 | 3 | go 1.19 4 | 5 | require golang.org/x/text v0.6.0 6 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= 2 | golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 3 | -------------------------------------------------------------------------------- /internal/gen/gen.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "encoding/csv" 6 | "flag" 7 | "fmt" 8 | "go/format" 9 | "io" 10 | "log" 11 | "net/http" 12 | "os" 13 | 14 | "golang.org/x/text/encoding/japanese" 15 | "golang.org/x/text/transform" 16 | ) 17 | 18 | var output = flag.String("output", "dates.go", "output path") 19 | 20 | func main() { 21 | if err := _main(); err != nil { 22 | log.Fatal(err) 23 | } 24 | fmt.Printf("created %s\n", *output) 25 | } 26 | 27 | func _main() error { 28 | var src io.Reader 29 | if len(os.Args) == 1 { 30 | u := "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv" 31 | req, err := http.NewRequest("GET", u, nil) 32 | if err != nil { 33 | return err 34 | } 35 | req.Header.Set("User-Agent", "https://github.com/soh335/shukujitsu") 36 | 37 | fmt.Printf("download %s\n", u) 38 | res, err := http.DefaultClient.Do(req) 39 | if err != nil { 40 | return err 41 | } 42 | defer res.Body.Close() 43 | if res.StatusCode != http.StatusOK { 44 | return fmt.Errorf("status code:%d", res.StatusCode) 45 | } 46 | src = res.Body 47 | } else { 48 | f, err := os.Open(os.Args[1]) 49 | if err != nil { 50 | return err 51 | } 52 | defer f.Close() 53 | src = f 54 | } 55 | 56 | r := csv.NewReader(transform.NewReader(src, japanese.ShiftJIS.NewDecoder())) 57 | // drop first line 58 | if _, err := r.Read(); err != nil { 59 | return err 60 | } 61 | 62 | var buf bytes.Buffer 63 | buf.WriteString(`// Code generated by internal/gen/gen.go; DO NOT EDIT.`) 64 | buf.WriteString("\npackage shukujitsu") 65 | buf.WriteString("\nvar dates = map[string]string{") 66 | for { 67 | records, err := r.Read() 68 | if err != nil { 69 | if err == io.EOF { 70 | break 71 | } 72 | return err 73 | } 74 | l := fmt.Sprintf("\n\"%s\": \"%s\",", records[0], records[1]) 75 | buf.WriteString(l) 76 | } 77 | buf.WriteString("\n}") 78 | 79 | formated, err := format.Source(buf.Bytes()) 80 | if err != nil { 81 | return err 82 | } 83 | return os.WriteFile(*output, formated, 0644) 84 | } 85 | -------------------------------------------------------------------------------- /shukujitsu.go: -------------------------------------------------------------------------------- 1 | package shukujitsu 2 | 3 | import ( 4 | "time" 5 | ) 6 | 7 | // IsShukujitsu determines shukujitsu. 8 | // This function don't care timezone of arguments time. 9 | // So you need to care your timezone. 10 | func IsShukujitsu(t time.Time) bool { 11 | key := t.Format("2006/1/2") 12 | if _, ok := dates[key]; ok { 13 | return true 14 | } 15 | return false 16 | } 17 | -------------------------------------------------------------------------------- /shukujitsu_test.go: -------------------------------------------------------------------------------- 1 | package shukujitsu 2 | 3 | import ( 4 | "testing" 5 | "time" 6 | ) 7 | 8 | func TestIsShukujitsu(t *testing.T) { 9 | loc, err := time.LoadLocation("Asia/Tokyo") 10 | if err != nil { 11 | t.Error(err) 12 | } 13 | 14 | type spec struct { 15 | Input time.Time 16 | Expect bool 17 | } 18 | 19 | specs := []spec{ 20 | { 21 | Input: time.Date(2020, 1, 13, 0, 0, 0, 0, loc), 22 | Expect: true, 23 | }, 24 | { 25 | Input: time.Date(2020, 1, 14, 0, 0, 0, 0, loc), 26 | Expect: false, 27 | }, 28 | { 29 | Input: time.Date(2019, 5, 4, 0, 0, 0, 0, loc), 30 | Expect: true, 31 | }, 32 | } 33 | 34 | for _, s := range specs { 35 | if IsShukujitsu(s.Input) != s.Expect { 36 | t.Errorf("IsShukujitsu(%s) expect %v", s.Input, s.Expect) 37 | } 38 | } 39 | } 40 | --------------------------------------------------------------------------------