String 从字符串中获取整月值

String 从字符串中获取整月值,string,go,time,String,Go,Time,我正在解析AWS中的一个cron字符串,看起来像11月13日的cron0 7?2019使用go的内置类型是否有一种从11月回到11月的干净方法?time.Month类型允许将int映射到字符串,但似乎没有一种方法可以实现相反的操作。我错过什么了吗?现在,我写这篇文章是为了得到一个map[string]int,我正在使用它:monthi:=getmonthnames[monthName] 前言:我在年发布了这个实用程序,请参阅 这是目前最好的办法 最好使用包级别变量并只填充映射一次 这样做会更清洁

我正在解析AWS中的一个cron字符串,看起来像11月13日的cron0 7?2019使用go的内置类型是否有一种从11月回到11月的干净方法?time.Month类型允许将int映射到字符串,但似乎没有一种方法可以实现相反的操作。我错过什么了吗?现在,我写这篇文章是为了得到一个map[string]int,我正在使用它:monthi:=getmonthnames[monthName]

前言:我在年发布了这个实用程序,请参阅

这是目前最好的办法

最好使用包级别变量并只填充映射一次

这样做会更清洁、更安全:

var months = map[string]time.Month{}

func init() {
    for i := time.January; i <= time.December; i++ {
        months[i.String()] = i
    }
}
请在以下服务器上尝试输出:

请注意,此映射具有灵活性,您可以添加短月份名称,映射到同一个月份。例如,您还可以添加months[Jan]=time.一月,因此如果您的输入是Jan,您也可以获得time.一月。这可以通过在同一循环中对长名称进行切片轻松完成,例如:

for i := time.January; i <= time.December; i++ {
    name := i.String()
    months[name] = i
    months[name[:3]] = i
}
哪些输出可以在以下设备上试用:

但简单的映射查找在性能上优于此方法


看到类似的问题:

哈哈,我一直坐在这里,在第二个监视器上打开这个问题,看着编辑滚动通过。现在它在一个实用程序中发布了!我爱你,所以。。。另外,谢谢你的帮助,做得很好!
for _, s := range []string{"January", "December", "invalid"} {
    m := months[s]
    fmt.Println(int(m), m)
}
1 January
12 December
0 %!Month(0)
for i := time.January; i <= time.December; i++ {
    name := i.String()
    months[name] = i
    months[name[:3]] = i
}
for _, s := range []string{"January", "December", "invalid"} {
    t, err := time.Parse("January", s)
    m := t.Month()
    fmt.Println(int(m), m, err)
}
1 January <nil>
12 December <nil>
1 January parsing time "invalid" as "January": cannot parse "invalid" as "January"