登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-16 23:33:29 403浏览 收藏

在使用 Google OAuth2 刷新令牌时,时间字符串中出现了“m=+”字段。该字段表示单调时钟读数,以十进制秒数格式化。单调时钟信息仅用于调试目的,golang 不提供解析它的布局。为了正常使用时间字符串,建议使用 .format() 而不是 .string() 方法,从 Go 1.9 开始,调用 .string() 将生成带有单调时钟的日期字符串输出。

问题内容

我正在尝试使用 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=+ 是什么?


解决方案


m=± 的第二读数为 monotonic clock

来自time.Time.String documentation的解释:

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

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()

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

本篇关于《GO 时间字符串中的“m=+”是什么?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>