猿问

使用 time.Parse 时出错,当时区和偏移量在一起时

我有以下代码:


package main


import (

    "fmt"

    "time"

    "log"

)


func main() {

    date, err := time.Parse("Monday, 2 January 2006 15:04:05 PM MST-07:00" ,"Thursday, 17 August 2020 13:20:00 PM GMT+08:00")

    if err != nil {

      log.Fatal(err.Error())

    }

    fmt.Println(date)

}

它失败并出现以下错误:


2009/11/10 23:00:00 解析时间“2020 年 8 月 17 日星期四 13:20:00 PM GMT+08:00”为“2006 年 1 月 2 日星期一 15:04:05 PM MST-07:00”:无法将“:00”解析为“-07:00”


但是,如果我在布局示例和实际字符串中将 MST-07:00 与空格分隔为:“MST -07:00”,则它会成功。


我究竟做错了什么?


紫衣仙女
浏览 81回答 1
1回答

隔江千里

GMT 时间经过特殊处理time.Parse。值中 GMT 的带符号偏移量必须在 -23 到 +23 范围内,不包括零,并且不能包含冒号。布局应该只指定MST没有偏移量。例如:package mainimport (    "fmt"    "log"    "time")func main() {    for _, ts := range []string{        "Thursday, 17 August 2020 13:20:00 PM GMT",        "Thursday, 17 August 2020 13:20:00 PM GMT+2",        "Thursday, 17 August 2020 13:20:00 PM GMT-2",    } {        date, err := time.Parse("Monday, 2 January 2006 15:04:05 PM MST", ts)        if err != nil {            log.Fatal(err.Error())        }        fmt.Println(date)    }}产生输出:crow@mac:tp$ ./example2020-08-17 13:20:00 +0000 GMT2020-08-17 15:20:00 +0200 GMT+22020-08-17 11:20:00 -0200 GMT-2不久前提出了一个问题,结果是(参考包含 的示例时间字符串GMT+10:00):GMT 的特殊处理是其他事情所必需的,因此很难知道 +10:00 是否应该被视为时区的一部分,还是应该单独保留以匹配布局。所以这个问题在没有提出修改的情况下就关闭了。
随时随地看视频慕课网APP

相关分类

Go
我要回答