时间格式转换成strftime默认格式

time format converted to strftime default format

Common Log Format 的维基百科条目中,strftime 格式为:

[10/Oct/2000:13:55:36 -0700] is the date, time, and time zone that the request was received, by default in strftime format %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](根据维基百科)。我的格式有什么问题?

我查过那一天是星期二,那个日期的时区是 -7 小时(PDT)。

对于 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