我想将以下字符串解析为 go 中的日期:
"This item will be released on March 9, 2014."
我跟着this并想出了:
func findReleaseDateString(raw string) time.Time {
test, err := time.Parse("This item will be released on January 2, 2006.", raw)
if err != nil {
panic(err)
}
return test
}
这对英语字符串来说就像一个魅力。
我的问题:我想解析德语字符串。喜欢:
"Dieser Artikel wird am 9. März 2014 erscheinen."
我知道,我可以通过正则表达式匹配日、月和年,然后解析它。但 是否有可能 告诉 time.Parse 为月份使用一组不同的常量?
目前 time 包不支持 i18n。在等待发生的同时,您可以尝试使用包装器包,例如:
如
monday
的文档所述:
周一不能替代标准时间套餐。这是在国际化功能尚未准备就绪时使用的临时解决方案。
这就是为什么星期一不创建任何额外的解析算法、布局标识符。它只是 time.Format 和 time.ParseInLocation 的包装,并使用所有相同的布局 ID、常量等。
这是您使用
monday
的示例:
package main
import (
"fmt"
"github.com/goodsign/monday"
"time"
)
func findReleaseDateString(raw string) time.Time {
loc, _ := time.LoadLocation("Europe/Berlin")
t, err := monday.ParseInLocation("Dieser Artikel wird am 2. January 2006 erscheinen.", raw, loc, monday.LocaleDeDE)
if err != nil {
panic(err)
}
return t
}
func main() {
t := findReleaseDateString("Dieser Artikel wird am 9. März 2014 erscheinen.")
fmt.Println(t)
}
输出:
2014-03-09 00:00:00 +0100 CET
编辑:ANisus 建议的包装器包以比我的建议更务实的方式解决了问题。尽管如此,我的回答还是展示了如何利用 Go 开源的事实来自行研究标准库中问题的可能解决方案。
time.Time
。和
monday
类似,性能也不错。
https://pkg.go.dev/github.com/elastic/lunes