将MySQL日期时间字符串转换为time.Time格式

时间:2015-12-23 15:01:23

标签: datetime time go

我无法设法将SQL日期时间(MySQL)值解析为time.Time值。我找不到适合sql datetime的布局。而且也不太明白这是如何运作的。

我想我不是第一个与此斗争的人,虽然我无法真正找到我应该如何做到这一点。

输入:

2015-12-23 00:00:00

期望的输出:

1450825200

代码

time, err := time.Parse(time.SomeSqlDateTimeLayout, "2015-12-23 00:00:00")
timestamp := time.Unix()

2 个答案:

答案 0 :(得分:10)

如果标准库中不存在,您可以创建自己的解析格式。

package main

import (
    "fmt"
    "time"
)

func main() {
    layout := "2006-01-02 15:04:05"
    str := "2015-12-23 00:00:00"
    t, err := time.Parse(layout, str)

    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(t.Unix())
}

输出

1450828800

我不知道时间格式的官方文档是什么,但您可以从第64行找到here

答案 1 :(得分:2)

实际上,我不知道Go的标准库中有任何ISO-8601解析支持。

让我们使用RFC-3309,它是最接近的:

package main

import (
  "fmt"
  "time"
  "strings"
)

func main() {

  // convert iso-8601 into rfc-3339 format
  rfc3339t := strings.Replace("2015-12-23 00:00:00", " ", "T", 1) + "Z"

  // parse rfc-3339 datetime
  t, err := time.Parse(time.RFC3339, rfc3339t)
  if err != nil {
    panic(err)
  }

  // convert into unix time
  ut := t.UnixNano() / int64(time.Millisecond)

  fmt.Println(ut)
}

输出

1450828800000

游乐场:http://play.golang.org/p/HxZCpxmjvg

希望这有帮助!