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

5

我无法将SQL日期时间(MySQL)值解析为time.Time值。我找不到适合SQL日期时间的布局,也不太理解这是如何工作的。

我想象自己不是第一个遇到这个问题的人,但我确实找不到如何使其工作的方法。

输入:

2015-12-23 00:00:00

期望输出:

1450825200

代码

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

你只是想将字符串转换为时间戳,还是希望它作为time.Time值从数据库中输出?我觉得后者会更有用。 - jcbwlkr
Roy,你不应该把标签中的信息放入标题中。你已经打了go标签,这就足够了。 - kostix
1
可能是Go-解析不是“标准”格式的日期/时间字符串的重复问题。 - Ezequiel Moreno
2个回答

15

如果标准库中不存在你所需要的时间格式,你可以自己创建一个用于解析的时间格式。

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行开始。


1

实际上,我不知道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

希望这能有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接