我有很多日期时间值作为字符串传入我的 golang 程序。格式是固定的位数:
2006/01/02 15:04:05
我开始用time.Parse函数解析这些日期
const dtFormat = "2006/01/02 15:04:05"
func ParseDate1(strdate string) (time.Time, error) {
return time.Parse(dtFormat, strdate)
}
但是我的程序有一些性能问题。因此,考虑到我的格式是固定的,我尝试通过编写自己的解析函数来调整它:
func ParseDate2(strdate string) (time.Time, error) {
year, _ := strconv.Atoi(strdate[:4])
month, _ := strconv.Atoi(strdate[5:7])
day, _ := strconv.Atoi(strdate[8:10])
hour, _ := strconv.Atoi(strdate[11:13])
minute, _ := strconv.Atoi(strdate[14:16])
second, _ := strconv.Atoi(strdate[17:19])
return time.Date(year, time.Month(month), day, hour, minute, second, 0, time.UTC), nil
}
最后我在这两个函数之上做了一个基准测试,得到了以下结果:
BenchmarkParseDate1 5000000 343 ns/op
BenchmarkParseDate2 10000000 248 ns/op
这是性能提高了 27%。在性能方面有没有更好的方法可以改善这种日期时间解析?