GO 时间字符串中的“m=+”是什么?

kke*_*ley 7 time go

我正在尝试使用 Google OAuth2,并且在我的刷新令牌到期时遇到了这个问题。它来自 2018-10-15 15:42:37.5989253 +1100 AEDT m=+3610.688917401

我知道这是一种时间格式,但我找不到任何有关m=+任何地方的信息。是否由 Google 内部使用?我试图用它来解析它,time.RFC3339但你可以猜到,它忽略了m=+. 它说

解析时间“2018-10-15 15:42:37.5989253 +1100 AEDT m=+3610.688917401”为“2006-01-02T15:04:05Z07:00”:无法解析:“15.AE+07:00”:35.AE+1059210DT1001 3610.688917401" 为 "T"

那么m=+ 时间字符串中的这个是什么?

nov*_*ung 10

m=±<value>单调的时钟在二读。

来自time.Time.String文档的解释:

如果时间具有单调时钟读数,则返回的字符串包括最后一个字段“m=±”,其中 value 是格式化为十进制秒数的单调时钟读数。

Afaik,golang 不提供解析单调时钟的布局,所以在我看来,删除它是安全的。

dateFormat := "2006-01-02 15:04:05.999999999 -0700 MST"
dateString := "2018-10-15 15:42:37.5989253 +1100 AEDT m=+3610.688917401"

t, err := time.Parse(dateFormat, strings.Split(dateString, " m=")[0])
if err != nil {
    fmt.Println(err)
    os.Exit(0)
}

fmt.Println(t) // 2018-10-15 15:42:37.5989253 +1100 AEDT
Run Code Online (Sandbox Code Playgroud)

go 1.9开始,调用.String()将生成带有单调时钟的日期字符串输出。所以我建议尝试使用.Format()正常使用而不是.String(). 单调时钟信息仅用于调试目的。