亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將工作日字符串解析為 time.Weekday

將工作日字符串解析為 time.Weekday

Go
婷婷同學_ 2023-04-10 10:30:06
我遇到了將星期幾字符串轉換為time.Weekday值的問題。我找不到time包中內置的任何東西。然后我寫了這個簡單的函數(滿足我的需要):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)}在 Golang 中是否有任何其他推薦或更慣用的方法來執行此轉換?謝謝!
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

是的,使用映射而不是數組,因此查找更快更直接:


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)

}

測試它:


fmt.Println(parseWeekday("Monday"))

fmt.Println(parseWeekday("Friday"))

fmt.Println(parseWeekday("invalid"))

輸出(在Go Playgorund上試試):


Monday <nil>

Friday <nil>

Sunday invalid weekday 'invalid'

提示:


您甚至可以使用for循環來安全地初始化daysOfWeek地圖,如下所示:


var daysOfWeek = map[string]time.Weekday{}


func init() {

? ? for d := time.Sunday; d <= time.Saturday; d++ {

? ? ? ? daysOfWeek[d.String()] = d

? ? }

}

測試和輸出是一樣的。在Go Playground試試這個。


這個地圖解決方案的另一個不錯的屬性(與您的數組解決方案相比)是您可以在同一個地圖中列出其他有效值,這些值可以在time.Weekday沒有額外解析代碼的情況下被解析成。


例如,讓我們也將 3 個字母的短工作日名稱解析為它們的time.Weekday等價物,例如"Mon"to time.Monday。


這個擴展可以用一個簡單的循環來添加:


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

? ? }

}

測試它:


fmt.Println(parseWeekday("Monday"))

fmt.Println(parseWeekday("Friday"))

fmt.Println(parseWeekday("Mon"))

fmt.Println(parseWeekday("Fri"))

fmt.Println(parseWeekday("invalid"))

輸出(在Go Playground上嘗試):


Monday <nil>

Friday <nil>

Monday <nil>

Friday <nil>

Sunday invalid weekday 'invalid'


查看完整回答
反對 回復 2023-04-10
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

這看起來是這樣做的:


package main

import "time"


func parseWeekday(v string) (time.Weekday, error) {

   t, e := time.Parse("Monday 2", v + " 2")

   if e != nil { return 0, e }

   return t.Weekday(), nil

}


func main() {

   n, e := parseWeekday("Sunday")

   if e != nil {

      panic(e)

   }

   println(n == time.Sunday)

}

https://golang.org/pkg/time#Parse


查看完整回答
反對 回復 2023-04-10
  • 2 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號