首頁 > 後端開發 > Golang > 為什麼我的 Go `time.Parse` 函數傳回意外的時間值?

為什麼我的 Go `time.Parse` 函數傳回意外的時間值?

Barbara Streisand
發布: 2024-11-23 10:00:35
原創
965 人瀏覽過

Why is my Go `time.Parse` function returning an unexpected time value?

理解Go 中的time.Parse 行為

當嘗試使用time.Parse 方法將字串轉換為Go 中的time.Time值時,設定正確的格式字串對於獲得預期結果至關重要。

考慮以下程式碼snippet:

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2013-05-13T18:41:34.848Z"
    //even this is not working
    //const longForm = "2013-05-13 18:41:34.848 -0700 PDT"
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t)
}
登入後複製

程式碼嘗試使用 longForm 格式字串解析格式為「2013-05-13 18:41:34.848 -0700 PDT」的字串。但是,輸出是意外的:「0001-01-01 00:00:00 0000 UTC」。

要理解此行為,需要注意的是 time.Parse 方法的預設參考時間是“ Mon Jan 2 15:04:05 MST 2006”,表示 Unix 時間 1136239445。這意味著格式字串必須相應地表示參考時間。

在給定的程式碼中,longForm 格式字串錯誤地將參考時間表示為「2006-01-02 15:04:05 -0700」。參考時間格式不符會導致意外輸出。

要解決此問題,應修改longForm 格式字串以匹配參考時間:

package main

import (
        "fmt"
        "log"
        "time"
)

func main() {
        const longForm = "2006-01-02 15:04:05 -0700"
        t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700")
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(t)
}
登入後複製

使用正確的longForm格式化字串,time.Parse 方法現在可以準確地將字符串轉換為time.Time 值:「2013-05-13 01:41:34.848 0000 UTC」。

以上是為什麼我的 Go `time.Parse` 函數傳回意外的時間值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板