首页 >后端开发 >Golang >如何将星期几的字符串表示形式转换为'time.Weekday”值?

如何将星期几的字符串表示形式转换为'time.Weekday”值?

Patricia Arquette
Patricia Arquette原创
2024-10-30 17:55:03413浏览

How to Convert a String Representation of a Day of Week into a `time.Weekday` Value?

将星期几的字符串表示形式解析为时间。工作日值

问题:

转换表示一天的字符串工作日价值提出了挑战。时间包不包含任何用于此转换的内置功能。

初始解决方案:

初始方法是利用数组来存储日期之间的映射周字符串及其对应的 time.Weekday 值。例如:

<code class="go">var daysOfWeek = [...]string{
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
}

func parseWeekday(v string) (time.Weekday, error) {
    for i := range daysOfWeek {
        if daysOfWeek[i] == v {
            return time.Weekday(i), nil
        }
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}</code>

推荐优化:

为了提高转换的效率和清晰度,建议使用映射而不是数组。地图可以实现更快的查找,从而提高性能。

<code class="go">var daysOfWeek = map[string]time.Weekday{
    "Sunday":    time.Sunday,
    "Monday":    time.Monday,
    "Tuesday":   time.Tuesday,
    "Wednesday": time.Wednesday,
    "Thursday":  time.Thursday,
    "Friday":    time.Friday,
    "Saturday":  time.Saturday,
}

func parseWeekday(v string) (time.Weekday, error) {
    if d, ok := daysOfWeek[v]; ok {
        return d, nil
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}</code>

提示:

为了获得可靠的解决方案,可以使用 for 循环来安全地初始化 daysOfWeek map.

<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        daysOfWeek[d.String()] = d
    }
}</code>

额外的解析灵活性:

基于地图的解决方案比基于数组的方法具有优势。通过向映射添加额外的键值对,可以在不修改解析逻辑的情况下解析额外的有效值。

例如,要解析工作日的完整名称和 3 个字母的短名称,映射可以是扩展如下:

<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        name := d.String()
        daysOfWeek[name] = d
        daysOfWeek[name[:3]] = d
    }
}</code>
此扩展解决方案允许将“Mon”或“Fri”等字符串解析为其相应的时间。工作日值。

以上是如何将星期几的字符串表示形式转换为'time.Weekday”值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn