在Common Log Format的维基百科条目中,strftime格式为:
[10 / Oct / 2000:13:55:36 -0700]是日期,时间和时区 收到请求,默认情况下为strftime格式%d /%b /%Y:%H:%M:%S %Z
当我尝试使用time.Format函数时:
package main
import (
"fmt"
"time"
)
func main() {
t, _ := time.Parse(time.UnixDate, "Tue Oct 10 13:55:36 PDT 2000")
fmt.Println(time.Time(t).Format("01/Feb/2006:15:04:05 -0700"))
}
我得到输出[10/Feb/2000:13:55:36 +0000]
,而我期待[10/Oct/2000:13:55:36 -0700]
(每个维基百科)。我的格式有什么问题?
我检查那天是星期二,那个时间区域是-7h(PDT)。
答案 0 :(得分:6)
对于Format
布局,Jan
不是Feb
。例如,
package main
import (
"fmt"
"time"
)
func main() {
t, err := time.Parse(time.UnixDate, "Tue Oct 10 13:55:36 PDT 2000")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(time.Time(t).Format("01/Jan/2006:15:04:05 -0700"))
}
输出:
10/Oct/2000:13:55:36 +0000
此外,对于时区,请使用ParseInLocation
,
package main
import (
"fmt"
"time"
)
func main() {
loc, err := time.LoadLocation("America/Los_Angeles")
if err != nil {
fmt.Println(err)
return
}
t, err := time.ParseInLocation(time.UnixDate, "Tue Oct 10 13:55:36 PDT 2000", loc)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(t)
fmt.Println(time.Time(t).Format("01/Jan/2006:15:04:05 -0700"))
}
游乐场:https://play.golang.org/p/tBLw5oJSE5t
输出:
2000-10-10 13:55:36 -0700 PDT
10/Oct/2000:13:55:36 -0700