golang 從mysql取datetime類型數據

經過golang從mysql中查詢datetime字段,本想參考以前普通類型查詢,只要將變量類型修改成time.Time就能夠:mysql

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信息爲:git

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


經過google得出的解決方法是先將datetime的字面值賦值給string變量。而後經過time.Parse(layout, value)轉換爲time.Time類型
github

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

運行結果爲golang

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

這裏爲UTC時間,若是須要使用當地時區能夠使用time.ParseInLocation(layout, value, loc)指定當地時區sql

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




完整代碼
package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
)

func main() {
	db, err := sql.Open("mysql", "root:root@tcp(localhost:3306)/golang?charset=utf8")
	checkErr(err)
	rows, err := db.Query("select id,login_time from user where id=1")
	checkErr(err)
	for rows.Next() {
		var id int
		var lastLoginTime string
		err = rows.Scan(&id, &lastLoginTime)
		checkErr(err)
		DefaultTimeLoc := time.Local
		loginTime, err := time.ParseInLocation("2006-01-02 15:04:05", lastLoginTime, DefaultTimeLoc)
		checkErr(err)
		fmt.Println(loginTime)
	}
	db.Close()
}

func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}
相關文章
相關標籤/搜索