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) 
+0

另一个 '主变' 将被调换'日期'和'布局'参数到'ti me.Parse' – Gavin

+0

嗨戴夫,这工作完美 - 感谢您的帮助:) – Alex