【问题标题】:how to time.Parse() comma separate milliseconds in go如何在 go 中 time.Parse() 逗号分隔毫秒
【发布时间】:2020-05-12 04:54:25
【问题描述】:

我的日志的时间戳看起来像“2020-05-08 22:02:00,845”。他们有逗号分隔的毫秒,这就是给 time.Parse 的问题。我似乎无法弄清楚如何让 time.Parse 满意。这是在 go 版本 go1.13.4 darwin/amd64(以及下面链接的操场)中产生错误的示例代码;

package main

import (
    "time"
)

func main() {
    ts := "2020-05-08 22:02:00,845"
    _, err := time.Parse("2006-01-02 15:04:05,000", ts)
    print(err.Error())
}

运行该代码会产生此错误

parsing time "2020-05-08 22:02:00,845" as "2006-01-02 15:04:05,000": cannot parse "845" as ",000"

这里是go playground中代码的链接

那么解析这个格式会是什么样子呢?感谢您的帮助。

【问题讨论】:

  • 我怀疑你可以。
  • 可以将字符串中的逗号替换为句点,然后解析。
  • 小数秒需要小数点,不能换成其他标点符号。

标签: go time


【解决方案1】:

这是一个已经提交的错误here

行为记录如下:“小数秒通过在布局字符串的秒部分的末尾添加句点和零来表示,如在“15:04:05.000”中以毫秒精度格式化时间戳.

解决方法是将"," 替换为"."

主包

import (
    "time"
    "fmt"
    "strings"
)

func main() {
    ts := "2020-05-08 22:02:00,845"
    ts  =  strings.Replace(ts, ",", ".", -1)

    d, err := time.Parse("2006-01-02 15:04:05.000", ts)
    if err != nil{
        print(err.Error())
    }
    fmt.Println(d)
}

这里是Playground

【讨论】:

  • 您提到的错误将其视为本地化问题;在我的情况下,它不是。我正在使用 log4j 生成的以这种方式格式化的日志。
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多