英文:
time.Parse behaviour
问题
在Go语言中,尝试将字符串转换为time.Time
时,使用time包的Parse方法无法返回预期的结果。问题似乎与时区有关。我想要改为使用ISO 8601格式的日期和时间,并且使用UTC时间。
package main
import (
"fmt"
"time"
)
func main() {
const longForm = "2013-05-13T18:41:34.848Z"
//即使这样也不起作用
//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)
//输出结果为 0001-01-01 00:00:00 +0000 UTC
}
提前感谢!
英文:
In Go, while trying to convert string to time.Time
, using time package's Parse method doesn't return expected result. It seems problem is with the timezone. I want to change to ISO 8601 combined with date and time in UTC.
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
}
thanks in advance!
答案1
得分: 6
你的格式字符串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
英文:
Your format string longForm
is not correct. You would know that if you would have not been ignoring the returned error. Quoting the docs:
> These are predefined layouts for use in Time.Format and Time.Parse. The reference time used in the layouts is:
Mon Jan 2 15:04:05 MST 2006
> which is Unix time 1136239445. Since MST is GMT-0700, the reference time can be thought of as
01/02 03:04:05PM '06 -0700
> To define your own format, write down what the reference time would look like formatted your way; see the values of constants like ANSIC, StampMicro or Kitchen for examples.
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)
}
Output:
2013-05-13 01:41:34.848 +0000 UTC
答案2
得分: 2
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)
//输出 2013-05-14 01:41:34.848 +0000 UTC <nil>
}
英文:
time.Parse
uses special values for time formatting, and expecting the format to be passed with those values.
If you pass correct values, it will parse the time in the correct manner.
So passing year as 2006, month as 01 and goes on like that...
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>
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论