go时间字段格式化返回

时间字段的结构体使用 LocalTime 类型即可

package tool

import (
	"database/sql/driver"
	"fmt"
	"goskeleton/app/global/variable"
	"time"
)

type LocalTime struct {
	time.Time
}

func (t LocalTime) MarshalJSON() ([]byte, error) {
	d := t.Format(variable.DateFormat)
	return []byte(`"` + d + `"`), nil
}

func (t LocalTime) Value() (driver.Value, error) {
	var zeroTime time.Time
	if t.Time.UnixNano() == zeroTime.UnixNano() {
		return nil, nil
	}
	return t.Time, nil
}

func (t *LocalTime) Scan(v interface{}) error {
	value, ok := v.(time.Time)
	if !ok {
		switch v.(type) {
		case int64:
			value = time.Unix(v.(int64), 0)
		default:
			log.Println("时间戳格式不能解析", v)
			return nil
		}
	}
	*t = LocalTime{Time: value}
	return nil
}

posted @ 2021-08-24 13:42  Silent-Cxl  阅读(62)  评论(0)    收藏  举报