我希望将以下字符串解析为go中的日期:
"This item will be released on March 9, 2014."我跟着这走了出来:
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
}这对英语字符串来说就像一种魅力。
My problem:我想解析德语字符串。比如:
"Dieser Artikel wird am 9. März 2014 erscheinen."我知道,我可以通过正则表达式来匹配日、月、年,然后解析它。但是是否有可能告诉time.Parse为月份使用一组不同的常量?
发布于 2014-02-11 08:56:05
目前对时间包没有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 +0100 CET
发布于 2014-02-11 08:50:03
从封装时间的format.go源程序中可以看到,天/月的名称被定义为变量-(长的_不幸的是,名称是小写的,这意味着它们不被导出。如果是,您可以在调用time.Parse()之前修改它们。也许您应该提交一个bug来公开这些变量,或者提供一种修改它们的方法,或者自己编写并提交一个修补程序。当然,您还可以创建时间包的私有副本,并在那里进行所需的更改。
编辑:-- ANisus建议的包装包--以比我的建议更务实的方式解决了这个问题。不过,我的回答显示了如何利用Go是开放源码的事实来自己调查标准库中可能的问题解决方案。
发布于 2019-12-22 14:01:14
您可以只使用月份的任何名称,例如2006年1月2日,它将返回为您翻译的正确日期。
https://stackoverflow.com/questions/21696689
复制相似问题