如何在 Go 裡面time format
最近在用 go 的 time package,要把一些 unixtime 變成肉眼看得懂的時間格式,發現 go 時間格式的用法跟以前學過得語言有很大的不同,
以php來說,php的time format可以像下面的用法:
date("Y/m/d H:i:s,time());
以go來說語法會像
time.Now().Format("2006/01/02 15:04:05")
為什麼會這樣呢? 難道是 2006-01-02 15:04:05 發生了什麼事情? 先看一下他的src
const (
_ = iota
stdLongMonth = iota + stdNeedDate // "January"
stdMonth // "Jan"
stdNumMonth // "1"
stdZeroMonth // "01"
stdLongWeekDay // "Monday"
stdWeekDay // "Mon"
stdDay // "2"
stdUnderDay // "_2"
stdZeroDay // "02"
stdHour = iota + stdNeedClock // "15"
stdHour12 // "3"
stdZeroHour12 // "03"
stdMinute // "4"
stdZeroMinute // "04"
stdSecond // "5"
stdZeroSecond // "05"
stdLongYear = iota + stdNeedDate // "2006"
stdYear // "06"
stdPM = iota + stdNeedClock // "PM"
stdpm // "pm"
stdTZ = iota // "MST"
stdISO8601TZ // "Z0700" // prints Z for UTC
stdISO8601SecondsTZ // "Z070000"
stdISO8601ColonTZ // "Z07:00" // prints Z for UTC
stdISO8601ColonSecondsTZ // "Z07:00:00"
stdNumTZ // "-0700" // always numeric
stdNumSecondsTz // "-070000"
stdNumShortTZ // "-07" // always numeric
stdNumColonTZ // "-07:00" // always numeric
stdNumColonSecondsTZ // "-07:00:00"
stdFracSecond0 // ".0", ".00", ... , trailing zeros included
stdFracSecond9 // ".9", ".99", ..., trailing zeros omitted
stdNeedDate = 1 << 8 // need month, day, year
stdNeedClock = 2 << 8 // need hour, minute, second
stdArgShift = 16 // extra argument in high bits, above low stdArgShift
stdMask = 1<<stdArgShift - 1 // mask out argument
)
裡面就有講到他的設定,就是照這幾個數字去 parse,記憶口訣是基於
01/02 03:04:05PM '06 -0700
有沒有注意到?剛好是 1234567 的順序,很難講這個有別於其他語言的設定,到底是好還是不好,不過要花點時間去適應就是了。