Go
golang

Golang 日付のフォーマットでハマった話

More than 3 years have passed since last update.

Golangで日付のフォーマットを指定するにはtimeのFormatを使用するのだが

graphite-api用に以下のフォーマットにする必要があった。

しかしなぜかうまく動作する環境としない環境があって時間をドブに捨てた話。

結論からいうと、不具合だったよう?です。golangのバージョンアップで直りました。


フォーマットの指定について

指定フォーマット  HH:SS_YYYYMMDD

なので、Golangとしては Format("15:04_20060102")


テストコード

package main

import (
"fmt"
"time"
)

func main() {
now := time.Now()
fmt.Printf("now=%v, formatted=%s\n", now, now.Format("15:04_20060102"))
}


1.6.2の場合

# go run main.go

now=2016-05-16 17:14:54.851096532 +0900 JST, formatted=17:14_20160516


1.5.1の場合

# go run main.go

now=2016-05-16 17:13:45.995101638 +0900 JST, formatted=17:13160160516

15:04_20060102の_2の部分が日付のstdUnderDayとして認識されてしまっている模様。

https://github.com/golang/go/blob/master/src/time/format.go#L82

教えていただいたのですが、1.6.1ぐらいで修正されている模様です。

https://github.com/golang/go/commit/f4b4d2f4d9f574fe34b826bf0e6784956a247687

とりあえず、自分の環境も1.6.2にアップデートすることにします。