LoginSignup
5
1

More than 5 years have passed since last update.

ジェイソンがいつ来ても良いように13日の金曜日を検出するツール作ってみた

Last updated at Posted at 2018-07-14

先日(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言語だとこれぐらいの行数で簡単に出来ましたね。
ソースはこちらでも公開中です。
そのうち過去の日付も検出できるようにするかもしれません。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1