gorm time json格式化
gorm 默认 Model
type Model struct {
ID uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt DeletedAt `gorm:"index"`
}
time.Time 类型在 gorm 进行查询的返回结果,读取到的时间字段往往是这样:"2024-07-03T22:14:02.973528+08:00",带着时区和毫秒。但其实往往这样的格式,可能不是想要的。
想要变成我们想要的,看了gorm DeletedAt源码后我们可以自定义一个Model 效果跟gorm.Model一样。
package model
import (
"database/sql"
"database/sql/driver"
"encoding/json"
"fmt"
"time"
"gorm.io/gorm"
)
type LocalTime sql.NullTime
// Scan implements the Scanner interface.
func (n *LocalTime) Scan(value interface{}) error {
return (*sql.NullTime)(n).Scan(value)
}
// Value implements the driver Valuer interface.
func (n LocalTime) Value() (driver.Value, error) {
if !n.Valid {
return nil, nil
}
return n.Time, nil
}
func (n LocalTime) MarshalJSON() ([]byte, error) {
if !n.Valid {
return json.Marshal(nil)
}
tTime := time.Time(n.Time)
return []byte(fmt.Sprintf("\"%v\"", tTime.Format("2006-01-02 15:04:05"))), nil
}
func (n *LocalTime) UnmarshalJSON(b []byte) error {
if string(b) == "null" {
n.Valid = false
return nil
}
err := json.Unmarshal(b, &n.Time)
if err == nil {
n.Valid = true
}
return err
}
type Model struct {
ID uint `gorm:"primarykey"`
CreatedAt LocalTime
UpdatedAt LocalTime
DeletedAt gorm.DeletedAt `gorm:"index"`
}

浙公网安备 33010602011771号