【问题标题】:What is "m=+" in GO time string? [duplicate]GO 时间字符串中的“m=+”是什么? [复制]
【发布时间】:2019-03-19 11:07:59
【问题描述】:

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

【问题讨论】:

    标签: go time


    【解决方案1】:

    m=±<value>monotonic clock 读秒。

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

    如果时间具有单调时钟读数,则返回的字符串包含最后一个字段“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()

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

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 2012-03-31
      • 2015-08-25
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多