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

问题描述 投票:0回答:4

我想将以下字符串解析为 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 go
4个回答
8
投票

目前 time 包不支持 i18n。在等待发生的同时,您可以尝试使用包装器包,例如:

github.com/goodsign/monday

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



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


0
投票
还有一个库可以将本地化时间字符串解析为

time.Time

。和
monday
类似,性能也不错。

https://pkg.go.dev/github.com/elastic/lunes

© www.soinside.com 2019 - 2024. All rights reserved.