Understanding time.Parse Behavior
When using the Parse method in Go's time package to convert a string to a time.Time instance, it's important to consider the timezone and provide an appropriate format string. The following code fails to convert a string to a time.Time as expected, due to incorrect timezone handling:
import ( "fmt" "time" ) func main() { const longForm = "2013-05-13T18:41:34.848Z" t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT") fmt.Println(t) }
This code prints 0001-01-01 00:00:00 0000 UTC instead of the expected 2013-05-13 01:41:34.848 0000 UTC.
Solution: Specify Correct Format String
The incorrect behavior is caused by an incorrect format string. The longForm should be defined to match the format of the input string:
const longForm = "2006-01-02 15:04:05 -0700"
This format string corresponds to the format of the input string: 2013-05-13 18:41:34.848 -0700 PDT.
Updated Code:
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 PDT") if err != nil { log.Fatal(err) } fmt.Println(t) }
With the correct format string, the code will now output the expected time: 2013-05-13 01:41:34.848 0000 UTC.
The above is the detailed content of Why does `time.Parse` in Go fail to convert a string to a `time.Time` instance when timezone is involved?. For more information, please follow other related articles on the PHP Chinese website!