【问题标题】:Golang converting between time formats [closed]Golang 在时间格式之间转换 [关闭]
【发布时间】:2019-06-10 06:12:43
【问题描述】:

我正在尝试解析一个时间字符串,该字符串在网络上作为 JSON 传输。在下面的代码中,我只是在尝试时间解析:

currentTime := time.Now().String()
//currentTime has the time
t1, _ := time.Parse(time.RFC3339, currentTime)
fmt.Println(t1.String())

最后一行会破坏时间并产生输出: 0001-01-01 00:00:00 +0000 UTC

看到这个 GoPlayground:https://play.golang.org/p/Q_G_qYcnaHP

我错过了什么?

【问题讨论】:

  • 你到底想做什么? Parse 是在您有一个预期格式的字符串时返回一个 Time 变量。我想你想做相反的事情,可以使用Format

标签: string go time


【解决方案1】:

首先您忽略了time.Parse() 返回的错误。永远不要忽略错误。

如果打印错误:

currentTime := time.Now().String()
t1, err := time.Parse(time.RFC3339, currentTime)
fmt.Println(err)
fmt.Println(t1.String())

输出(在Go Playground上试试):

parsing time "2009-11-10 23:00:00 +0000 UTC m=+0.000000001" as "2006-01-02T15:04:05Z07:00": cannot parse " 23:00:00 +0000 UTC m=+0.000000001" as "T"
0001-01-01 00:00:00 +0000 UTC

问题在于Time.String() 生成的文本表示形式与time.RFC3339 指定的格式不同。 Time.String() 使用以下格式生成输出:

"2006-01-02 15:04:05.999999999 -0700 MST"

当您尝试从格式中解析它时:

RFC3339 = "2006-01-02T15:04:05Z07:00"

显然这行不通。

【讨论】:

    【解决方案2】:

    @icza 是对的。您应该在 godoc https://golang.org/pkg/time/#Time.String 上查看它

    String returns the time formatted using the format string
    
    "2006-01-02 15:04:05.999999999 -0700 MST"
    

    如果您是 golang 新手,您可能想知道正确的方法。

    方法如下:

    formatstr:="2006-01-02 15:04:05.999999999 -0700 MST"
    currentTime := time.Now().String()
    t1, _ := time.Parse(formatstr, currentTime)
    fmt.Println(t1.String())
    

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 1970-01-01
      • 2019-05-21
      • 2016-07-28
      • 2010-09-12
      • 2021-10-23
      • 2021-05-14
      • 1970-01-01
      • 2010-12-19
      相关资源
      最近更新 更多