Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime Golang解析奇怪的日期格式_Datetime_Go - Fatal编程技术网

Datetime Golang解析奇怪的日期格式

Datetime Golang解析奇怪的日期格式,datetime,go,Datetime,Go,我正在开发一个解析器,它可以解析游戏中的日志文件,这样我就可以对游戏中的拍卖进行分析,但是日志记录者编写的日期格式似乎造成了问题,因为该格式似乎是为日志记录者定制的,一个示例日期戳如下:[Wed Nov 23:26:10 2016]我尝试用以下方法解析它: func (r *AuctionReader) extractSaleInformation(line string) { fmt.Println("Extracting information from: ", line)

我正在开发一个解析器,它可以解析游戏中的日志文件,这样我就可以对游戏中的拍卖进行分析,但是日志记录者编写的日期格式似乎造成了问题,因为该格式似乎是为日志记录者定制的,一个示例日期戳如下:
[Wed Nov 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”解析为“2016年11月23日星期三23:26:10”:无法将“DD-MM-YYYY hh:MM:ss”解析为“2016年11月23日星期三”


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

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

因此,要阅读格式“Wed Nov 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")
t.Format("02-01-2006 15:04:05")
然后,要以给定格式输出它,如果您想要格式
DD-MM-YYYY hh:MM:ss
,您可以将参考时间放入该格式:
02-01-2006 15:04:05
,然后执行以下操作:

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

所以基本上,主要的变化是

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

// Format mask for output
layout := "02-01-2006 15:04:05"
time.Parse(layout, date)

应该是

// Format mask for output
layout := "02-01-2006 15:04:05"
time.Parse(layout, date)

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

因此,要阅读格式“Wed Nov 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")
t.Format("02-01-2006 15:04:05")
然后,要以给定格式输出它,如果您想要格式
DD-MM-YYYY hh:MM:ss
,您可以将参考时间放入该格式:
02-01-2006 15:04:05
,然后执行以下操作:

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

所以基本上,主要的变化是

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

// Format mask for output
layout := "02-01-2006 15:04:05"
time.Parse(layout, date)

应该是

// Format mask for output
layout := "02-01-2006 15:04:05"
time.Parse(layout, date)

另一个“主要更改”是将
date
layout
参数替换为
time。Parse
另一个“主要更改”是将
date
layout
参数替换为
time。Parse