如何使用locale将日期转换为go中的字符串?

Igo*_*bin 2 locale date go

我通过这种方式将日期转换为字符串:

d.Format("Mon 02. Jan")
Run Code Online (Sandbox Code Playgroud)

我得到类似的东西

Fri 27. Jan
Run Code Online (Sandbox Code Playgroud)

如何切换语言环境并使用其他语言获取字符串?

Pau*_*yer 7

您可以使用替换程序来快速解决该问题。\n德语示例:

\n\n
r := strings.NewReplacer(\n            "January", "Januar",\n            "February", "Februar",\n            "March", "M\xc3\xa4rz",\n            "April", "April",\n            "May", "Mai",\n            "June", "Juni",\n            "July", "Juli",\n            "August", "August",\n            "September", "September",\n            "October", "Oktober",\n            "November", "November",\n            "December", "Dezember", )\n\n\ntime := inputTime.Format("2 January 2006")\n\noutputString := r.Replace(time)\n
Run Code Online (Sandbox Code Playgroud)\n


icz*_*cza 6

你不能.Go标准库不包含本地化的月,日和区域名称.名称连接到time包中.

例如,返回的月份名称Month.String()存储在未导出的time.month全局变量中:

var months = [...]string{
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December",
}

func (m Month) String() string { return months[m-1] }
Run Code Online (Sandbox Code Playgroud)

同样,工作日的名称来自Weekday.String(),存储在未导出的变量中time.days.

话虽如此,可能有第三方图书馆支持您的需求.这是一个不完整的,可能对你有所帮助:https://github.com/mattbaird/go-i18n-formats

正如Igor Chubin在下面分享的那样,这个第三方库更加完整:https://github.com/variadico/lctime

另请注意,虽然提供一般的多语言时间格式化包不是一件容易的事,但如果您真的需要它,您可以获取time包,将其复制到您的项目中,然后将名称翻译成您需要的语言.

另请注意,支持少量语言和少量布局,您可以轻松自行创建格式.

例如,下面的代码time.Time使用您在问题中使用的布局来格式化匈牙利语中的给定值:

func Format(t time.Time) string {
    return fmt.Sprintf("%s %02d. %s",
        days[t.Weekday()][:3], t.Day(), months[t.Month()-1][:3],
    )
}

var days = [...]string{
    "Vasárnap", "Hétf?", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat"}

var months = [...]string{
    "Január", "Február", "Március", "Április", "Május", "Június",
    "Július", "Augusztus", "Szeptember", "Október", "November", "December",
}
Run Code Online (Sandbox Code Playgroud)

测试它:

fmt.Println(Format(time.Now()))
Run Code Online (Sandbox Code Playgroud)

Go Playground的输出:

Ked 10. Nov
Run Code Online (Sandbox Code Playgroud)

我本地机器上的输出:

Pén 27. Jan
Run Code Online (Sandbox Code Playgroud)

  • 我不敢相信事情竟然如此糟糕。go 没有强大的 i18n 包吗? (2认同)
  • 我找到了这个库:https://github.com/variadico/lctime,它似乎具有我需要的功能。谢谢伊扎! (2认同)