Golang解析奇怪的日期格式
问题描述:
我正在解析从游戏中解析日志文件的解析器,因此我可以对游戏内进行的拍卖进行分析,但是由记录器写入的日期格式似乎导致问题,因为格式似乎对记录仪进行定制编写的,一个例子日期时间戳的样子:[Wed Nov 23 23:26:10 2016]
我尝试分析它:Golang解析奇怪的日期格式
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 parsing time "DD-MM-YYYY hh:mm:ss" as "Wed Nov 23 23:26:10 2016": cannot parse "DD-MM-YYYY hh:mm:ss" as "Wed Nov "
我怎么能得到pa rser来识别这个看似自定义的格式,我将这个数据保存到Mongo中,所以我不想将拍卖时间存储为字符串,因为我想单独查询时间戳。
答
Golang以独特的方式处理所有日期格式 - 它使用参考时间Mon Jan 2 15:04:05 MST 2006
(01/02 03:04:05 PM '06 -0700)来显示格式化/解析给定时间/字符串的模式。
所以,阅读格式“周三11月23日23点26分10秒2016”你会把基准日到该格式为:“周一1月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)
另一个 '主变' 将被调换'日期'和'布局'参数到'ti me.Parse' – Gavin
嗨戴夫,这工作完美 - 感谢您的帮助:) – Alex