在Go中格式化详细日期

时间:2015-03-05 23:27:34

标签: go

我想以人类可读的格式生成格式化日期。通常在英语区域设置中,后缀用于该月的某一天,即第1,第2,第3,第4,第5等等。

我尝试使用格式字符串"Monday 2nd January"来格式化这些日期,但它似乎不起作用。

E.g。在the playground中:

import (
    "fmt"
    "time"
)

const format = "Monday 2nd January"

func main() {
    t1 := time.Date(2015, 3, 4, 1, 1, 1, 1, time.UTC)
    fmt.Println(t1.Format(format))

    t2 := time.Date(2015, 3, 1, 1, 1, 1, 1, time.UTC)
    fmt.Println(t2.Format(format))
}

这会生成结果

Wednesday 4nd March
Sunday 1nd March

但我希望

Wednesday 4th March
Sunday 1st March

我做错了什么?

1 个答案:

答案 0 :(得分:3)

它不支持这种格式化,你必须自己实现它,像这样的东西(hacky):

func formatDate(t time.Time) string {
    suffix := "th"
    switch t.Day() {
    case 1, 21, 31:
        suffix = "st"
    case 2, 22:
        suffix = "nd"
    case 3, 23:
        suffix = "rd"
    }
    return t.Format("Monday 2" + suffix + " January")
}

play