我正在使用解析器来解析游戏中的日志文件,以便可以对游戏内的拍卖进行分析,但是记录器正在编写的日期格式似乎会引起问题,因为该格式似乎是为自定义编写的在记录器中,日期时间戳记示例如下:[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))
}
Run Code Online (Sandbox Code Playgroud)
当我尝试解析上述日期时间字符串时,出现以下错误:
0001-01-01 00:00:00 +0000 UTC解析时间“ DD-MM-YYYY hh:mm:ss”为“ Wed Nov 23 23:26:10 2016”:无法解析“ DD-MM-YYYY hh: mm:ss“作为” Wed Nov“
我如何使解析器识别这种看似自定义的格式,我将把这些数据保存到Mongo,所以我不想将拍卖时间存储为字符串,因为我想单独查询时间戳。
Golang以独特的方式处理所有日期格式-它使用参考时间Mon Jan 2 15:04:05 MST 2006(01/02 03:04:05 PM '06 -0700)来显示用于格式化/解析给定时间/字符串的模式。
因此,要阅读格式“ 2016年11月23日星期三23:26:10”,您可以将参考日期放入该格式:“ 2006年1月2日星期一15:04:05”,然后执行以下操作:
t, _ := time.Parse("Mon Jan 2 15:04:05 2006", "Wed Nov 23 23:26:10 2016")
Run Code Online (Sandbox Code Playgroud)
然后,要以给定的格式输出它,如果您想要使用format DD-MM-YYYY hh:mm:ss,则可以将参考时间放入该格式:中02-01-2006 15:04:05,然后执行:
t.Format("02-01-2006 15:04:05")
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/VO5413Z7-z
所以基本上,主要的变化是
// Format mask for output
layout := "DD-MM-YYYY hh:mm:ss"
Run Code Online (Sandbox Code Playgroud)
应该
// Format mask for output
layout := "02-01-2006 15:04:05"
Run Code Online (Sandbox Code Playgroud)
和
time.Parse(date, layout)
Run Code Online (Sandbox Code Playgroud)
应该
time.Parse(layout, date)
Run Code Online (Sandbox Code Playgroud)