理解 time.Parse 行为
当使用 Go 的 time 包中的 Parse 方法将字符串转换为 time.Time 实例时,它是考虑时区并提供适当的格式字符串很重要。由于时区处理不正确,以下代码无法按预期将字符串转换为 time.Time:
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) }
此代码打印 0001-01-01 00:00:00 0000 UTC 而不是预期的2013-05-13 01:41:34.848 0000 UTC。
解决方案:指定正确的格式字符串
不正确的行为是由不正确的格式字符串引起的。应定义 longForm 以匹配输入字符串的格式:
const longForm = "2006-01-02 15:04:05 -0700"
此格式字符串对应于输入字符串的格式:2013-05-13 18:41:34.848 -0700 PDT。
更新的代码:
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) }
使用正确的格式字符串,代码现在将输出预期时间:2013-05-13 01:41:34.848 0000 UTC .
以上是为什么 Go 中的 time.Parse 在涉及时区时无法将字符串转换为 time.Time 实例?的详细内容。更多信息请关注PHP中文网其他相关文章!