Golang Gorm time 时间字段格式化模型类 重写
问题:
在使用GORM中 如果我们使用到了CreateAt 和UpdateAt 就会发现 这个时间的类型是time.Time 而其数据是
"2022-10-13T10:14:02.973528+08:00" 这样的,
然而这样的数据你说能用确实能用 ,但是一旦写入数据库中就变成了
0001-01-01 00:00:00.000000 +00:00
重写数据类型
话不多说 直接上代码
并且此代码通用【小弟也是copy学习视频上的】
点击展开
package model import ( "database/sql/driver" "fmt" "time" ) const timeFormat = "2006-01-02 15:04:05" const timezone = "Asia/Shanghai" type Time time.Time func (t Time) MarshalJSON() ([]byte, error) { b := make([]byte, 0, len(timeFormat)+2) b = append(b, '"') b = time.Time(t).AppendFormat(b, timeFormat) b = append(b, '"') return b, nil } func (t *Time) UnmarshalJSON(data []byte) (err error) { now, err := time.ParseInLocation(`"`+timeFormat+`"`, string(data), time.Local) *t = Time(now) return } func (t Time) String() string { return time.Time(t).Format(timeFormat) } func (t Time) local() time.Time { loc, _ := time.LoadLocation(timezone) return time.Time(t).In(loc) } func (t Time) Value() (driver.Value, error) { var zeroTime time.Time var ti = time.Time(t) if ti.UnixNano() == zeroTime.UnixNano() { return nil, nil } return ti, nil } func (t *Time) Scan(v interface{}) error { value, ok := v.(time.Time) if ok { *t = Time(value) return nil } return fmt.Errorf("can not convert %v to timestamp", v) }
调用
至于调用就更简单了 如下代码所示
package model type Category struct { //*gorm.Model ID uint `json:"id" gorm:"primary key"` Name string `json:"name" gorm:"type:varchar(50); not null;unique"` CreatedAt Time `json:"create_at"` UpdatedAt Time `json:"update_at"` }
本文发表于博客园《始識的技术笔记》,作者为 zichliang(hybpjx/始識)
作者博客:https://www.cnblogs.com/zichliang
本文地址:https://www.cnblogs.com/zichliang/p/16788724.html
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
作者博客:https://www.cnblogs.com/zichliang
本文地址:https://www.cnblogs.com/zichliang/p/16788724.html
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
标签:
Golang

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律