簡體   English   中英

時區和偏移量在一起時使用 time.Parse 時出錯

[英]Error while using time.Parse when timezone and offset are together

我有以下代碼:

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”,它就會成功。

我究竟做錯了什么?

GMT 時間由time.Parse進行特殊處理。 值中 GMT 的有符號偏移量必須在 -23 到 +23 的范圍內(不包括零),並且可能不包括冒號。 布局應該只指定沒有偏移的MST

例如:

package main

import (
    "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$ ./example
2020-08-17 13:20:00 +0000 GMT
2020-08-17 15:20:00 +0200 GMT+2
2020-08-17 11:20:00 -0200 GMT-2

不久前為此提出了一個問題,結果是(參考包含GMT+10:00的示例時間字符串):

GMT 的特殊處理是其他事情所需要的,這使得很難知道 +10:00 是應該被視為時區的一部分還是應該單獨保留以匹配布局。

所以這個問題在沒有提出更改的情況下就結束了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM