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

时间:2017-01-27 15:18:01

标签: date go locale

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

d.Format("Mon 02. Jan")

我得到像

这样的东西
Fri 27. Jan

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

2 个答案:

答案 0 :(得分:5)

你做不到。 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] }

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

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

正如Igor Chubin在下面分享的那样,这个第三方lib更加完整: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",
}

测试它:

fmt.Println(Format(time.Now()))

Go Playground上的输出:

Ked 10. Nov

我本地机器上的输出:

Pén 27. Jan

答案 1 :(得分:0)

您可以将替换程序用作该问题的快速修复。 德语示例:

Sub testStackOverflow()
Dim myrange As Range
Dim Criteria1 As String
Dim Criteria2 As String
Dim Criteria3 As String
Dim Criteria4 As String

Set myrange = Worksheets("Sheet2").Range("A1:A50")


Criteria1 = "Monitors"
Criteria2 = "Jul-19"
Criteria3 = "1"
Criteria4 = "P"



For Each SearchCell In myrange
    Debug.Print SearchCell.Value
    If SearchCell.Value = Criteria1 Then
        If SearchCell.Offset(0, 1).Value = Criteria2 Then
            If SearchCell.Offset(0, 2).Value = Criteria3 Then
                If SearchCell.Offset(0, 4).Value = Criteria4 Then
                    LastRow = Sheets("Sheet5").Range("A1048576").End(xlUp).Row + 1
                    Sheets("Sheet5").Range("A" & LastRow).Value = SearchCell.Value
                    Sheets("Sheet5").Range("B" & LastRow).Value = SearchCell.Offset(0, 1).Value
                    Sheets("Sheet5").Range("C" & LastRow).Value = SearchCell.Offset(0, 2).Value
                    Sheets("Sheet5").Range("D" & LastRow).Value = SearchCell.Offset(0, 3).Value
                    Sheets("Sheet5").Range("E" & LastRow).Value = SearchCell.Offset(0, 4).Value
                End If
            End If
        End If
    End If
Next SearchCell

End Sub