【问题标题】:time format converted to strftime default format时间格式转换为 strftime 默认格式
【发布时间】:2018-03-26 23:35:19
【问题描述】:

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

【问题讨论】:

标签: go strftime


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-22
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多