首页 > 解决方案 > GO 时间字符串中的“m=+”是什么?

问题描述

我正在尝试使用 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:42:37.5989253 +1100 AEDT m=+ 3610.688917401" 作为 "T"

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

标签: gotime

解决方案


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

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

单调时钟信息仅用于调试目的。


推荐阅读