golang 从mysql取datetime类型数据

通过golang从mysql中查询datetime字段,本想参考之前普通类型查询,只要将变量类型修改为time.Time就可以:

rows, err := db.Query("select login_time from user where id=1")
for rows.Next() {
 var lastLoginTime time.Time
 err = rows.Scan(&lastLoginTime)
 if err != nil {
	panic(err)
 }
 fmt.Println(lastLoginTime)
}

运行代码并没有得到预期的结果,运行出错,err信息为:

sql: Scan error on column index 1: unsupported driver -> Scan pair: []uint8 -> *time.Time


通过google得出的解决方法是先将datetime的字面值赋值给string变量。然后通过time.Parse(layout, value)转换为time.Time类型

var lastLoginTime string
err = rows.Scan(&lastLoginTime)
loginTime, _ := time.Parse("2006-01-02 15:04:05", lastLoginTime)
fmt.Println(loginTime)

运行结果为

2015-05-22 13:22:51 +0000 UTC

这里为UTC时间,如果需要使用当地时区可以使用time.ParseInLocation(layout, value, loc)指定当地时区

DefaultTimeLoc := time.Local
loginTime, err := time.ParseInLocation("2006-01-02 15:04:05", lastLoginTime, DefaultTimeLoc)

完整代码:https://github.com/it-man-cn/golang-example/blob/master/mysql.go

One Comment

  1. 搞笑新聞说道:

    支持,希望你可以持續更新

搞笑新聞进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>