[英]Golang time.Parse() Behavior - Dropping Precision when 000
在 Go 中,我對在將日期字符串解析為time.Time
時觀察到的time.Parse()
的行為感到困惑。
如果給定時間字符串的毫秒數恰好等於“000”,例如“2017-01-02T01:02:03.000Z”,time.Parse time.Parse()
將截斷“000”。
為了日志記錄和其他用例的一致性,包含而不是省略它似乎更可取。
這是預期的行為嗎? 如果是這樣,為什么?
獎勵:我們如何保留“000”?
package main
import (
"log"
"time"
)
func main() {
const (
ISO_8601 = "2006-01-02T15:04:05.999Z"
)
tMap := map[string]string{
"t00": "2017-01-02T01:02:03.000Z",
"t01": "2017-01-02T01:02:03.000Z",
"t02": "2017-01-02T01:02:03.456Z",
"t03": "2017-01-03T01:02:03.123Z",
"t04": "2013-10-04T01:02:03.456Z",
"t05": "2012-02-02T01:02:03.321Z",
"t06": "2011-03-07T01:02:03.849Z",
}
for _, v := range tMap {
t, err := time.Parse(ISO_8601, v)
logFatal("0H N03Z!!1", err)
// Dude where's my 000?
log.Printf("Key: %s | lenTimeString: %d | Val: %s \n", t.String(), len(t.String()), t)
}
}
func logFatal(hint string, e error) {
if e != nil {
log.Fatal(hint, e)
}
}
輸出:
2009/11/10 23:00:00 Key: t05 | lenTimeString: 33 | timeString: 2012-02-02 01:02:03.321 +0000 UTC
2009/11/10 23:00:00 Key: t06 | lenTimeString: 33 | timeString: 2011-03-07 01:02:03.849 +0000 UTC
2009/11/10 23:00:00 Key: t00 | lenTimeString: 29 | timeString: 2017-01-02 01:02:03 +0000 UTC
2009/11/10 23:00:00 Key: t01 | lenTimeString: 29 | timeString: 2017-01-02 01:02:03 +0000 UTC
2009/11/10 23:00:00 Key: t02 | lenTimeString: 33 | timeString: 2017-01-02 01:02:03.456 +0000 UTC
2009/11/10 23:00:00 Key: t03 | lenTimeString: 33 | timeString: 2017-01-03 01:02:03.123 +0000 UTC
2009/11/10 23:00:00 Key: t04 | lenTimeString: 33 | timeString: 2013-10-04 01:02:03.456 +0000 UTC
編輯:這是在@zerkms 的幫助下的簡化解決方案
package main
import (
"fmt"
"time"
)
func main() {
p := fmt.Println
const (
ISO_8601 = "2006-01-02T15:04:05.000Z"
ISO_8601_dropmilli = "2006-01-02T15:04:05.999Z"
)
t := time.Date(2017, time.October, 31, 15, 16, 17, 000000000, time.Local)
p(t.Format(ISO_8601))
p(t.Format(ISO_8601_dropmilli))
}
輸出:
2017-10-31T15:16:17.000Z
2017-10-31T15:16:17Z
time.String
使用2006-01-02 15:04:05.999999999 -0700 MST
格式。
要保持零使用0
而不是9
: 2006-01-02 15:04:05.000000000 -0700 MST
t.Format("2006-01-02 15:04:05.000 -0700 MST")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.