在Go中解析时间戳

时间:2017-06-20 05:20:10

标签: json parsing datetime go

我正在调用基于JSON SIRI API的服务,该API以格式

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

也许,但如果不是,那么你可以自己动手做到这一点:

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