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)

運行結果為

2018-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)




完整代碼
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)
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM