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

时间:2018-03-26 23:35:20

标签: go strftime

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)。

1 个答案:

答案 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