首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解析非英语字符串中的月份

如何解析非英语字符串中的月份
EN

Stack Overflow用户
提问于 2014-02-11 08:30:31
回答 3查看 2K关注 0票数 6

我希望将以下字符串解析为go中的日期:

代码语言:javascript
复制
"This item will be released on March 9, 2014."

我跟着走了出来:

代码语言:javascript
复制
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:我想解析德语字符串。比如:

代码语言:javascript
复制
"Dieser Artikel wird am 9. März 2014 erscheinen."

我知道,我可以通过正则表达式来匹配日、月、年,然后解析它。但是是否有可能告诉time.Parse为月份使用一组不同的常量?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-11 08:56:05

目前对时间包没有i18n支持。在等待这种情况发生时,您可以尝试使用包装程序包,如:

Github.com/初级商品/星期一

正如monday的文档所述:

星期一不是标准时间包的替代物。这是在国际化特性尚未准备就绪时使用的临时解决方案。 这就是为什么星期一没有创建任何额外的解析算法,布局标识符。它只是time.Format和time.ParseInLocation的包装器,使用所有相同的布局ID、常量等。

下面是使用monday的示例

代码语言:javascript
复制
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

票数 8
EN

Stack Overflow用户

发布于 2014-02-11 08:50:03

封装时间的format.go源程序中可以看到,天/月的名称被定义为变量-(长的_不幸的是,名称是小写的,这意味着它们不被导出。如果是,您可以在调用time.Parse()之前修改它们。也许您应该提交一个bug来公开这些变量,或者提供一种修改它们的方法,或者自己编写并提交一个修补程序。当然,您还可以创建时间包的私有副本,并在那里进行所需的更改。

编辑:-- ANisus建议的包装包--以比我的建议更务实的方式解决了这个问题。不过,我的回答显示了如何利用Go是开放源码的事实来自己调查标准库中可能的问题解决方案。

票数 0
EN

Stack Overflow用户

发布于 2019-12-22 14:01:14

您可以只使用月份的任何名称,例如2006年1月2日,它将返回为您翻译的正确日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21696689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档