【问题标题】:Parse mongo db field's value "date" into golang with parse method of time package使用时间包的解析方法将mongo db字段的值“日期”解析为golang
【发布时间】:2018-10-10 13:53:25
【问题描述】:

我将created_date 列作为字符串和它的值,例如我从mongo db 列得到的2018-10-04 15:42:19.000404667 +0000 UTC m=+103.387519062,现在我将它插入到mysql 表中,当然它是string 类型.现在的问题是我无法解析它并对其进行格式化,这里我尝试使用下面的代码进行解析但无法得到解决方案。

tm, err := time.Parse("2006-02-01", "2018-10-04 15:42:19.000404667 +0000 UTC m=+103.387519062")
if err != nil {
    fmt.Println(err)
}

它打印了一些错误,例如:

解析时间“2018-10-04 15:42:19.000404667 +0000 UTC m=+103.387519062”为“2006-01-02T15:04:05.999999999Z07:00”:无法解析“15:42:19.000404667 +000” UTC m=+103.387519062" 为 "T"

我尝试使用不同的 consttime 包,但仍在深入研究,我在这里缺少什么,或者我在解析错误的 date 类型。

谢谢。

【问题讨论】:

  • m=+xxx 是什么意思?
  • 我是从mongo db 列的值中得到的。

标签: go datetime-parsing


【解决方案1】:

除非已知m=... 部分是恒定的(在这种情况下,您应该将它原样包含在格式字符串中),您必须在将其从输入字符串中剥离出来,然后再将其传递给time.Parse()。没有办法告诉time.Parse() 它应该忽略输入的一部分(除非它总是相同的字符串)。

注意,您应该提供完整的时间说明符作为格式,而不仅仅是“2006-02-01”,因为如果您不这样做,库将以自己的方式扩展它以包括小时、分钟和秒 - 这不一定是您想要的方式(在您的情况下,它会自动添加T15:04:05.999999999Z07:00 - 但您的输入数据在日期之后包含一个空格,而不是T,因此它不会匹配)。在您的情况下(根据您的示例输入数据判断),格式字符串应如下所示:2006-02-01 15:04:05.000000000 -0700 MST

【讨论】:

  • Leo K 在删除 m=... 并应用提供的格式字符串后运行良好,但我们不能用 m=... 解析吗?
  • 正如我所说,time.Parse() 无法处理包含额外字符的输入 - 输入 必须 看起来与格式模板完全相同。没有“通配符”字符。格式应包含充当占位符或其他文字字符的数字或字符串“MST”(并且任何不是占位符的内容都必须准确出现在输入中,否则将被视为无效)。
  • 感谢@Leo K,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 2015-01-28
  • 2019-02-09
  • 2021-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多