【问题标题】:Parse time stamp in Go在 Go 中解析时间戳
【发布时间】:2017-11-22 11:41:49
【问题描述】:

我正在调用基于 JSON SIRI API 的服务,它返回格式为

的时间戳
"ResponseTimestamp": "/Date(1497923363000+0930)/"

它看起来像自 Unix 纪元以来的毫秒数,加上本地时区偏移量。

标准的 Go 包是否包含解析这种格式的方法,如果有,它是什么?

我在这个网站和其他网站上搜索过诸如 parse、golang、timestamp、tick、epoch 之类的术语。它在 JavaScript 的上下文中被提及,但不是 Go。我查看了这些包的 Go 源代码,但没有找到对这种格式的任何引用。

我可以编写自己的函数来执行此操作,但我认为 Go 会包含格式解析器。

【问题讨论】:

  • 1) 你试过什么? 2)我们不能推荐图书馆。这完全是题外话。 3) 如果你用谷歌搜索,甚至花 5 分钟阅读 Go 文档,你就会得到答案。
  • 让我重新表述我的问题。标准的 Go 包是否包含解析这种格式的方法,如果是,它是什么?我已经在这个网站和其他网站上搜索过诸如 parse、golang、timestamp、tick、epoch 之类的术语。它在 JavaScript 的上下文中被提及,但不是 Go
  • “标准的 Go 包是否包含解析这种格式的方法” 是的,他们有。如果您阅读了 time 的文档,这是最明显的软件包,您就会知道答案。
  • 我放弃了寻找@Flimzy 认为显而易见的东西。如果有人想启发我,我将不胜感激。同时,我使用了类似于霍布斯建议的功能

标签: json parsing datetime go


【解决方案1】:

也许可以,但如果不是,您可以按照以下方式自行操作:

pattern := regexp.MustCompile(`\A/Date\((\d+)([+-]\d+)\)/\z`)
m := pattern.FindStringSubmatch(res.ResponseTimestamp)
if len(m) == 0 {
    // Handle error: not a datetime in the expected format
}

// Get the milliseconds part
ms, err := strconv.Parseint(m[1], 10, 64)
// Handle err (in the rare case of, say, an out of range error)

// Use Go's time parser to parse the timezone part
tForLoc, err := time.Parse("-0700", m[2])
// Handle err (invalid timezone spec)

// Combine the milliseconds, the timezone, and the Unix epoch
t := time.Date(1970, 1, 1, 0, 0, 
    int(ms/1000), int((ms%1000)*1e6, tForLoc.Location())

return t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 2018-07-02
    • 2021-11-05
    • 2021-06-30
    • 2012-10-28
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多