go - 如何验证时区
问题描述
我需要验证给定的时区值,并且我也想以特定的日期格式解析它,时区应该是“-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
价值。
推荐阅读
- c# - 使用数据库中的数据实例化对象更改值
- javascript - 我希望在 Razor 函数中调用 JS 函数
- angular - Ionic 3 自定义库上的 ng-packagr
- javascript - 如何在列表的同一 li 中附加测试
- c++ - 在 c++ 中设置 int64 值的最高四位
- pdf - 缺少一些页面:jupyter notebook convert to pdf
- python - 如果列表中的整数小于列表中的前一个整数,则删除列表中的整数
- powershell - 如何从我的 get-adgroupmember 输出中删除外国安全主体?
- oracle12c - 为什么即使在扫描后 TABLE 也不在 V$IM_SEGMENTS 中填充?
- sql - SQL Server 中非聚集索引的最大键长度的解决方法