簡體   English   中英

時間解析行為

[英]time.Parse behaviour

在Go中,嘗試將字符串轉換為time.Time ,使用時間包的Parse方法不會返回預期結果。 似乎時區有問題。 我想將UTC中的日期和時間更改為ISO 8601。

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)
    //outputs 0001-01-01 00:00:00 +0000 UTC
}

提前致謝!

您的格式字符串longForm不正確。 您將知道,如果您不忽略返回的錯誤 引用文檔

這些是在Time.Format和Time.Parse中使用的預定義布局。 布局中使用的參考時間為:

Mon Jan 2 15:04:05 MST 2006

這是Unix時間1136239445。由於MST是GMT-0700,因此參考時間可以認為是

01/02 03:04:05PM '06 -0700

要定義自己的格式,請寫下參考時間,以哪種方式格式化; 有關示例,請參見ANSIC,StampMicro或Kitchen等常數的值。

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)
}

操場


輸出:

2013-05-13 01:41:34.848 +0000 UTC

time.Parse使用特殊值進行時間格式設置 ,並期望格式與這些值一起傳遞。

如果傳遞正確的值,它將以正確的方式解析時間。

因此,過去的年份為2006年,月份為01年,就這樣……

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2006-01-02 15:04:05.000 -0700 PDT"
    t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t.UTC(), err)
    //outputs 2013-05-14 01:41:34.848 +0000 UTC <nil>
}

暫無
暫無

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

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