第二十八:golang Time.time 时间格式返回定义结构体

一: 定义当前默认时间,写放数据库:

Go 复制代码
type Time time.Time

const (
	timeFormart = "2006-01-02 15:04:05"
	//timeFormart2 = "20060102150405"
)

func (t *Time) UnmarshalJSON(data []byte) (err error) {
	strData := string(data)
	if strings.Contains(strData, "/") {
		strData = strings.Trim(strData, `"'`)
		s := strings.Split(strData, "/")
		formatData := `"` + s[2][:4] + "-" + s[0] + "-" + s[1] + s[2][4:] + `"`
		strData = strings.Clone(formatData)
	}
	now, err := time.ParseInLocation(`"`+timeFormart+`"`, strData, time.Local)
	*t = Time(now)
	return
}

func (t Time) MarshalJSON() ([]byte, error) {
	b := make([]byte, 0, len(timeFormart)+2)
	b = append(b, '"')
	b = time.Time(t).AppendFormat(b, timeFormart)
	b = append(b, '"')
	return b, nil
}

func (t Time) String() string {
	return time.Time(t).Format(timeFormart)
}

func GetNow() Time {
	loc, _ := time.LoadLocation("Asia/Shanghai")
	return Time(time.Now().In(loc))
}

// 直接调用  GetNow() // 得出当前时间,是以 time 类型,在结构体调用:Getnow 如下结构体:

LoadTime            utils.Time     `json:"load_time" gorm:"type:timestamp;default:now()"`

第二种:返回当前时间类型,定义的是 Time 类型

Go 复制代码
type Time time.Time

const (
	timeFormart = "2006-01-02 15:04:05"
)

func (t *Time) UnmarshalJSON(data []byte) (err error) {
	strData := string(data)
	if strings.Contains(strData, "/") {
		strData = strings.Trim(strData, `"'`)
		s := strings.Split(strData, "/")
		formatData := `"` + s[2][:4] + "-" + s[0] + "-" + s[1] + s[2][4:] + `"`
		strData = strings.Clone(formatData)
	}
	now, err := time.ParseInLocation(`"`+timeFormart+`"`, strData, time.Local)
	*t = Time(now)
	return
}

func (t Time) MarshalJSON() ([]byte, error) {
	b := make([]byte, 0, len(timeFormart)+2)
	b = append(b, '"')
	b = time.Time(t).AppendFormat(b, timeFormart)
	b = append(b, '"')
	return b, nil
}

func (t Time) String() string {
	return time.Time(t).Format(timeFormart)
}

func GetNow(t time.Time) Time {
	loc, _ := time.LoadLocation("Asia/Shanghai")
	return Time(t.In(loc))
}

// GetNow() // 里面参数调用的是 返回 回来的时间类型处理

按这个方法调用返回时间类型: GetNow(v.CreatedAt)
相关推荐
考虑考虑8 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯9 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路12 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
kyriewen13 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒13 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
小林攻城狮14 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦14 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer14 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队14 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY14 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程