如何验证时区
How to validate the timezone
我需要验证我得到的时区值,我也想以特定的日期格式解析它,时区应该是“-1300 到 1400”(+/-HHMM)。
我试过一些,但我无法验证时区。
如果 timezone = "-1260
"(这是一个无效值),那么它应该打印 "Invalid time zone
" 但它的行为不是那样的。
这是我试过的代码 - https://play.golang.org/p/kbTsQAW-f-_r
var validTZ = regexp.MustCompile(`[+-][0-9]{4}$`)
tz:= "-1260"
tzInt, _ := strconv.Atoi(tz)
t1 := time.Now().UTC()
formattedDate := t1.Format("2006-01-02T15:04:05.000")
formattedDate += tz
_,err:=time.Parse("2006-01-02T15:04:05.000-0700",formattedDate)
if !validTZ.MatchString(tz) || (tzInt >= -1300 && tzInt <= 1400) || err != nil {
fmt.Println("Invalid time zone")
}
tz(1260)是真的tzInt >= -1300 && tzInt <= 1400
但是你的代码是:
!(tzInt >= -1300 && tzInt <= 1400)
!否定条件,使其成为 tzInt < -1300 || tzInt > 1400
:这就是 "Invalid time zone"
未显示的原因。
正如 OP 所评论的,您还可以根据更精确的正则表达式打印该错误:
^[+-]([0-9]{2})([0-5]{1})([0-9]{1})$
这将阻止任何 xx6y
值。
我需要验证我得到的时区值,我也想以特定的日期格式解析它,时区应该是“-1300 到 1400”(+/-HHMM)。
我试过一些,但我无法验证时区。
如果 timezone = "-1260
"(这是一个无效值),那么它应该打印 "Invalid time zone
" 但它的行为不是那样的。
这是我试过的代码 - https://play.golang.org/p/kbTsQAW-f-_r
var validTZ = regexp.MustCompile(`[+-][0-9]{4}$`)
tz:= "-1260"
tzInt, _ := strconv.Atoi(tz)
t1 := time.Now().UTC()
formattedDate := t1.Format("2006-01-02T15:04:05.000")
formattedDate += tz
_,err:=time.Parse("2006-01-02T15:04:05.000-0700",formattedDate)
if !validTZ.MatchString(tz) || (tzInt >= -1300 && tzInt <= 1400) || err != nil {
fmt.Println("Invalid time zone")
}
tz(1260)是真的tzInt >= -1300 && tzInt <= 1400
但是你的代码是:
!(tzInt >= -1300 && tzInt <= 1400)
!否定条件,使其成为 tzInt < -1300 || tzInt > 1400
:这就是 "Invalid time zone"
未显示的原因。
正如 OP 所评论的,您还可以根据更精确的正则表达式打印该错误:
^[+-]([0-9]{2})([0-5]{1})([0-9]{1})$
这将阻止任何 xx6y
值。