gorm中重新格式化json时间数据格式返回给前端
序列化和反序列化
model/time.go
package model
//gorm中重新格式化json时间数据格式返回给前端
import "time"
import (
"database/sql/driver"
"fmt"
)
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)
}
使用:创建数据库模型结构体时 ,调用全局封装的 Time
type Category struct {
ID uint `json:"id" gorm:"primary_key"`
Name string `json:"name" gorm:"type:varchar(50);not null;unique"`
CreatedAt Time `json:"created_at" gorm:"type:timestamp"`
UpdatedAt Time `json:"updated_at" gorm:"type:timestamp"` //通过使用全局Time格式化时间返回给前端
}