我正在试验 Google OAuth2,我在刷新 token 到期时遇到了这个问题。它来自 2018-10-15 15:42:37.5989253 +1100 AEDT m=+3610.688917401
我知道这是一种时间格式,但我无法在任何地方找到有关 m=+
的任何信息。它是谷歌内部使用的吗?我尝试用 time.RFC3339
解析它,但正如您猜到的那样,它忽略了 m=+
。它说
parsing time "2018-10-15 15:42:37.5989253 +1100 AEDT
m=+3610.688917401" as "2006-01-02T15:04:05Z07:00": cannot parse "
15:42:37.5989253 +1100 AEDT m=+3610.688917401" as "T"
那么时间字符串中的m=+
是什么?
m=±<value>
是monotonic clock秒读。
来自 time.Time.String
documentation 的解释:
If the time has a monotonic clock reading, the returned string includes a final field "m=±", where value is the monotonic clock reading formatted as a decimal number of seconds.
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
从go 1.9开始, 调用 .String()
将生成带有单调时钟的日期字符串输出。所以我建议尝试使用 .Format()
用于正常使用而不是 .String()
.
单调时钟信息仅对调试有用。