Golang解析奇怪的日期格式

时间:2016-12-02 19:02:57

标签: datetime go

我正在研究解析游戏日志文件的Parser,这样我就可以对游戏中的拍卖进行分析,但是记录器正在编写的日期格式似乎会导致问题,因为格式似乎是为记录器编写的自定义,一个示例日期时间戳看起来像:[Wed Nov 23 23:26:10 2016]我尝试解析它:

func (r *AuctionReader) extractSaleInformation(line string) {
    fmt.Println("Extracting information from: ", line)

    // Format mask for output
    layout := "DD-MM-YYYY hh:mm:ss"

    // Replace the square brackets so we're just left with the date-time string
    date := strings.TrimSpace(strings.Replace((strings.Split(line, "]")[0]), "[", "", -1))

    fmt.Println(time.Parse(date, layout))
}

当我尝试解析上述日期时间字符串时,我收到以下错误:

  

0001-01-01 00:00:00 +0000 UTC解析时间“DD-MM-YYYY hh:mm:ss”为“Wed Nov 23 23:26:10 2016”:无法解析“DD-MM- YYYY ......:mm:ss“as”Wed Wed“

如何让解析器识别这种看似自定义的格式,我将把这些数据保存到Mongo,所以我不想将拍卖时间存储为字符串,因为我想单独查询时间戳。 / p>

1 个答案:

答案 0 :(得分:4)

Golang以独特的方式处理所有日期格式 - 它使用参考时间Mon Jan 2 15:04:05 MST 2006(01/02 03:04:05 PM '06 -0700)来显示格式化/解析给定时间的模式/串。

因此,要阅读格式“Wed Nov 23 23:26:10 2016”,您可以将参考日期纳入该格式:“Mon Jan 2 15:04:05 2006”,然后执行:

t, _ := time.Parse("Mon Jan 2 15:04:05 2006", "Wed Nov 23 23:26:10 2016")

然后,要以给定格式输出,如果您需要格式DD-MM-YYYY hh:mm:ss,您可以将参考时间设置为以下格式:02-01-2006 15:04:05,然后执行:

t.Format("02-01-2006 15:04:05")

https://play.golang.org/p/VO5413Z7-z

基本上,主要的变化是

// Format mask for output
layout := "DD-MM-YYYY hh:mm:ss"

应该是

// Format mask for output
layout := "02-01-2006 15:04:05"

time.Parse(date, layout)

应该是

time.Parse(layout, date)