如何使用时间获取顺序指示符.格式化()



time.Format()方法将解析参数January 2, 2006以输出June 20, 2021,但不会将January 2nd, 2006解析为June 20th, 2021,而是输出June 20nd, 2021

我如何告诉它使用正确的序数标记:st/nd/rd/th后缀?我看文档中没有提到它。

标准库中不支持序数指示符。您可以通过获得此答案的帮助自行实现,也可以使用第三方软件包。

Go有一个第三方包,可以将输入的整数转换为具有正确序数指示符的字符串;看看去人性化。

此外,如果你看一下go humanize对序数指标的支持的实现情况;你会注意到这非常简单,所以我更喜欢通过引用我链接的两个实现来自己实现它。参考:https://github.com/dustin/go-humanize/blob/v1.0.0/ordinals.go#L8

或者,去使用去人性化。

要添加正确的序数指示符:st/nd/rd/th后缀,您可以使用switch case。我创建了一个示例程序来打印一个月中的所有日子及其各自的后缀,如下所示:

package main
import (
"fmt"
)
func getDaySuffix(n int) string {
if n >= 11 && n <= 13 {
return "th"
} else {
switch n % 10 {
case 1:
return "st"
case 2:
return "nd"
case 3:
return "rd"
default:
return "th"
}
}
}
func main() {
for i := 1; i < 32; i++ {
suf := getDaySuffix(i)
fmt.Println(i, suf)
}
}

输出:

1 st
2 nd
3 rd
4 th
5 th
6 th
7 th
8 th
9 th
10 th
11 th
12 th
13 th
14 th
15 th
16 th
17 th
18 th
19 th
20 th
21 st
22 nd
23 rd
24 th
25 th
26 th
27 th
28 th
29 th
30 th
31 st

最新更新