LoginSignup
0
0

More than 3 years have passed since last update.

golang で日付かどうかのチェック処理

Last updated at Posted at 2019-09-06

Goで日付の整合性をチェックする(コピペ用)

GoでUtilクラスを作りたかったので作成
日付のパースが成功したかどうかで判定する

package main

import (
    "fmt"
    "regexp"
    "time"
)

func main() {

    // 日付である場合
    fmt.Println(check("20190905"))
    fmt.Println(check("2019090508"))
    fmt.Println(check("20190905122001"))
    fmt.Println(check("2019-09-05"))
    fmt.Println(check("2019/09/01/12:23:59"))
    fmt.Println(check("2019/09/01/23:23:59"))
    fmt.Println(check("2000-02-29"))

    // 以下、falseが返る
    // 足りない
    fmt.Println(check("201"))
    // 存在しない日付
    fmt.Println(check("2019-09-00"))
    // 間違った閏日
    fmt.Println(check("20190229"))
    // 文字列
    fmt.Println(check("aaaaa"))
    // 時間が間違っている
    fmt.Println(check("2019/09/01/25:23:59"))
    // 0→O
    fmt.Println(check("2O19-O9-O1"))

}

// チェック処理
func check(dateStr string) bool {
    // 削除する文字列を定義
    reg := regexp.MustCompile(`[-|/|:| | ]`)

    // 指定文字を削除
    str := reg.ReplaceAllString(dateStr, "")

    // 数値の値に対してフォーマットを定義
    format := string([]rune("20060102150405")[:len(str)])

    // パース処理 → 日付ではない場合はエラー
    _, err := time.Parse(format, str)
    return err == nil
}

Goの場合はパースした時にerrが返るから、キチンとエラーハンドリングした方が安全な所もあるかもしれない
formatが特殊だから慣れが必要なのかな

0
0
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
0
0