最近在项目中有遇到过一个问题就是golang 在读取mysql 数据库时有个时间字段读出来的是0001-00-00 00:00:00 值,实际数据库里面确实0000-00-00 00:00:00,有点不太明白这是啥原因,考虑到我使用的是框架,于是使用原生的代码执行了一下,代码如下:
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)
type UserLoginLog struct {
UserId string
CreateTime string
LastTime string
}
func main() {
//fmt.Println("vim-go")
db, err := gorm.Open("mysql", "dm:Xiaoxia@2021@tcp(175.24.110.203:3306)/DataManager?charset=utf8")
if err != nil {
fmt.Println(err.Error())
}
if db == nil {
fmt.Println("数据库连接失败")
}
res := []UserLoginLog{}
_ = db.Debug().Raw("select user_id,create_time,last_time from sys_login_log").Scan(&res)
fmt.Println(res)
}
运行结果:
res.png
发现这样写是对的,和数据库里面的数据是一致的,可是我的项目也是使用的也是gorm哦,于是想到是不是这框架(gin-vue-admin)做了啥特殊处理,再结合下百度,发现是在连接mysql的时候多加了个参数parseTime=true 才导致这样的,于是笔者先做了下测试:
package main
import (
"fmt"
"time"
)
func main() {
t, _ := time.ParseInLocation("2006-01-02 15:04:05", "0000-00-00 00:00:00", time.Local)
fmt.Println("t:", t)
}
运行结果:
res.png
从运行结果来看:golang在解析时间为0000-00-00 00:00:00 字符串的时候是会转成0001-01-01 00:00:00 这种时间
如何去判断呢? 笔者找到一个方法就是t.IsZero() 方法来判断这个日期是不是零值,如果是零值可以返回一个空字符串或者是正常的0000-00-00 00:00:00 这种时间。
好了,今天的文章就写到这里了,有不对的地方欢迎小伙伴在下面给我留言,看到会及时回复的。
网友评论