美文网首页
gorm中时间处理

gorm中时间处理

作者: 寒云暮雨 | 来源:发表于2019-12-23 10:18 被阅读0次

有于gorm没有提供友好的时间处理功能,例如:查询的时间格式“2019-08-12T14:38:47”,这样的时间格式是及其不友好的,我们可以采用自定义数据类型的方式进行处理
自定义数据类型

package main
package utils

import (
    "database/sql/driver"
    "fmt"
    "time"
)

// JSONTime format json time field by myself
type JSONTime struct {
    time.Time
}

// MarshalJSON on JSONTime format Time field with %Y-%m-%d %H:%M:%S
func (t JSONTime) MarshalJSON() ([]byte, error) {
    if (t == JSONTime{}) {
        formatted := fmt.Sprintf("\"%s\"", "")
        return []byte(formatted), nil
    } else {
        formatted := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05"))
        return []byte(formatted), nil
    }
}

// Value insert timestamp into mysql need this function.
func (t JSONTime) Value() (driver.Value, error) {
    var zeroTime time.Time
    if t.Time.UnixNano() == zeroTime.UnixNano() {
        return nil, nil
    }
    return t.Time, nil
}

// Scan valueof time.Time
func (t *JSONTime) Scan(v interface{}) error {
    value, ok := v.(time.Time)
    if ok {
        *t = JSONTime{Time: value}
        return nil
    }
    return fmt.Errorf("can not convert %v to timestamp", v)
}

定义一个基础struct,让所有的model都继承

type Model struct {
    ID        uint           `gorm:"primary_key" json:"id"`
    CreatedAt utils.JSONTime `json:"createdAt"`
    UpdatedAt utils.JSONTime `json:"updatedAt"`
    DeletedAt utils.JSONTime `json:"deletedAt"`
}

参考文章:

gorm中时间处理
gorm中自定义字段

相关文章

网友评论

      本文标题:gorm中时间处理

      本文链接:https://www.haomeiwen.com/subject/yoqznctx.html