先日(2018/07/13)は、今年何度目かの13日の金曜日でしたね。
そこで次にいつジェイソンが来るかを知るために、13日の金曜日を検出するツール作ってみました。
ちなみに中身はGo言語による日付を解析したプログラムです。
コード
main.go
package main
import "flag"
import "fmt"
import "time"
var (
year = flag.Int("y", 3, "検出する年数")
)
func main() {
flag.Parse()
// 現在日取得
t := time.Now()
fmt.Println(t)
if t.Day() != 13 {
// 一度、当月の13日に変換する
t = time.Date(t.Year(), t.Month(), 13, t.Hour(), t.Minute(), t.Second(), 0, time.UTC)
fmt.Println(t)
}
// 指定年数分の日付検出
fmt.Println("ジェイソンが出現する日です")
for i := 0; i < *year*12; i++ {
t = t.AddDate(0, 1, 0)
if t.Weekday() == 5 {
fmt.Println(t)
}
}
}
使い方/ポイント
-
go run main.go
もしくはgo build
&./main
で実行可能 - 引数の
-y
に検出年数を指定可能(詳細は-h
で参照可能) -
time.Weekday
はfmtで出力時は文字列(String)(ex:Friday
)だが、戻り値は数値(Int)(ex:5
) - 一度現在日を取得後、当月の13日に変更してから、検出を開始しているため、実行日の現在日が13日の前後の場合問わず、出力される仕様
実行/出力内容
$ go run main.go
2018-07-14 10:19:34.798320968 +0900 JST m=+0.000362720
2018-07-13 10:19:34 +0000 UTC
ジェイソンが出現する日です
2019-09-13 10:19:34 +0000 UTC
2019-12-13 10:19:34 +0000 UTC
2020-03-13 10:19:34 +0000 UTC
2020-11-13 10:19:34 +0000 UTC
最後に
Go言語だとこれぐらいの行数で簡単に出来ましたね。
ソースはこちらでも公開中です。
そのうち過去の日付も検出できるようにするかもしれません。