国立天文台から最新の暦情報を取ってくる【広告記事】

2 min read読了の目安(約2500字

素人目には果てしなく下らないことしかやってないように見える国会だが,いつの間にか来年の暦を変えられてしまったらしい。

https://www.sangiin.go.jp/japanese/joho1/kousei/gian/203/meisai/m203080201056.htm

国立天文台のサイトでも

具体的には,令和2年12月4日 法律第68号「平成三十二年東京オリンピック競技大会・東京パラリンピック競技大会特別措置法等の一部を改正する法律」により,令和3年に限り,海の日は東京オリンピック開会式前日の7月22日,スポーツの日は開会式当日の7月23日,山の日は閉会式当日の8月8日となった.なお,8月8日は日曜日にあたるため,翌8月9日は休日となる.

とあり,早速対応したようだ。

国立天文台では暦情報を Google Calendar で公開しているため,この情報を使って最新の暦を取得できる。

実は失業期間中の暇つぶしに国立天文台の暦情報を取得する Go パッケージを作って公開している。

https://text.baldanders.info/release/2020/05/koyomi/

https://github.com/spiegel-im-spiegel/koyomi

祝日であれば

sample.go
package main

import (
    "fmt"
    "os"

    "github.com/spiegel-im-spiegel/koyomi"
)

func main() {
    start, _ := koyomi.DateFrom("2021-01-01")
    end, _ := koyomi.DateFrom("2021-12-31")
    k, err := koyomi.NewSource(
        koyomi.WithCalendarID(koyomi.Holiday),
        koyomi.WithStartDate(start),
        koyomi.WithEndDate(end),
    ).Get()
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }

    fmt.Println("| 日付 | 内容 |")
    fmt.Println("| ---- | ---- |")
    for _, e := range k.Events() {
        fmt.Printf("| %v | %v |\n", e.Date, e.Title)
    }
}

とすれば

$ go run sample.go 
| 日付 | 内容 |
| ---- | ---- |
| 2021-01-01 | 元日 |
| 2021-01-11 | 成人の日 |
| 2021-02-11 | 建国記念の日 |
| 2021-02-23 | 天皇誕生日 |
| 2021-03-20 | 春分の日 |
| 2021-04-29 | 昭和の日 |
| 2021-05-03 | 憲法記念日 |
| 2021-05-04 | みどりの日 |
| 2021-05-05 | こどもの日 |
| 2021-07-22 | 海の日 |
| 2021-07-23 | スポーツの日 |
| 2021-08-08 | 山の日 |
| 2021-08-09 | 休日 |
| 2021-09-20 | 敬老の日 |
| 2021-09-23 | 秋分の日 |
| 2021-11-03 | 文化の日 |
| 2021-11-23 | 勤労感謝の日 |

てな感じで取得できる。

上の koyomi.NewSource( ... ).Get() メソッドの返り値である構造体 koyomi.Koyomi は CSV および JSON 形式への変換メソッドを持っていて,たとえば

bytesData, err := k.EncodeCSV()

な感じに出力可能である。

ちなみに Google Calendar の iCal データをまるっと取ってくるので,めがっさ遅いです。通常はバッチ処理にしてデータベースかどっかに保持っておくのがいいだろう。

...事務や総務の方々の悲鳴が聞こえてきそうだよ。合掌...

参考