最近遇到了之前版本的beego的log日志代码中一个小问题,在输出的日志中,1-9月份都没问题,但是到了10月的时候的输出却依次大一个月,后来排查发现是代码中只用改一下就可以解决。
改了之后的代码,我把函数单独拎出来跑了一下,问题解决:
package main
import (
"fmt"
"time"
"unsafe"
)
//formatTimeHeader函数来源于 astaxie\beego\logs\logger.go
func formatTimeHeader(when time.Time) ([]byte, int) {
fmt.Println(when)
y, mo, d := when.Date()
h, mi, s := when.Clock()
//fmt.Println(y, mo, d)
//fmt.Println(h, mi, s)
//fmt.Println(mo)
//len(2006/01/02 15:03:04)==19
var buf [20]byte
t := 3
for y >= 10 {
p := y / 10
buf[t] = byte('0' + y - p*10)
y = p
t--
}
buf[0] = byte('0' + y)
buf[4] = '/'
if mo > 9 {
buf[5] = '1'
buf[6] = byte('0' + mo - 10) // 9改为10,解决问题
} else {
buf[5] = '0'
buf[6] = byte('0' + mo)
}
buf[7] = '/'
t = d / 10
buf[8] = byte('0' + t)
buf[9] = byte('0' + d - t*10)
buf[10] = ' '
t = h / 10
buf[11] = byte('0' + t)
buf[12] = byte('0' + h - t*10)
buf[13] = ':'
t = mi / 10
buf[14] = byte('0' + t)
buf[15] = byte('0' + mi - t*10)
buf[16] = ':'
t = s / 10
buf[17] = byte('0' + t)
buf[18] = byte('0' + s - t*10)
buf[19] = ' '
return buf[0:], d
}
//byte转string类型
func BytesToStringFast(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}
func main() {
//x, _ := formatTimeHeader(time.Now())
fmt.Println(x)
//fmt.Println(BytesToStringFast(x))
for i:=-12; i<12;i++{
x, _ := formatTimeHeader(time.Now().AddDate(0, i, 0))
fmt.Println(BytesToStringFast(x))
fmt.Println("")
}
}