我有很多日期时间值作为字符串传入我的 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%。在性能方面有没有更好的方法可以改善这种日期时间解析?