go语言中gorm时间格式化

 更新时间:2023年03月07日 14:30:08   作者:小龙在山东  
本文主要介绍了go语言中gorm时间格式化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

GORM自带的time.Time类型JSON默认输出RFC3339Nano格式的,但是如果想改为yyyy-MM-dd HH:mm:ss形式的时间格式,需要定制MarshalJSON了。

以下是数据库里存储的数据:

Go声明了一个LocalTime的别名,然后绑定了函数MarshalJSON,用于在序列化时调用。

package main

import (
	"database/sql/driver"
	"encoding/json"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"strings"
	"time"
)

type Student struct {
	Id       int
	Name     string
	Age      int
	Sex      string
	CreateAt time.Time
}

// TableName 指定表名
func (Student) TableName() string {
	return "student"
}

// LocalTime 别名
type LocalTime time.Time

func (t LocalTime) MarshalJSON() ([]byte, error) {
	tTime := time.Time(t)
	return []byte(fmt.Sprintf("\"%v\"", tTime.Format("2006-01-02 15:04:05"))), nil
}

func (t LocalTime) Value() (driver.Value, error) {
	// LocalTime 转换成 time.Time 类型
	tTime := time.Time(t)
	return tTime.Format("2006-01-02 15:04:05"), nil
}

func (t *LocalTime) UnmarshalJSON(data []byte) error {
	if string(data) == "null" {
		return nil
	}
	var err error
	//前端接收的时间字符串
	str := string(data)
	//去除接收的str收尾多余的"
	timeStr := strings.Trim(str, "\"")
	t1, err := time.Parse("2006-01-02 15:04:05", timeStr)
	*t = LocalTime(t1)
	return err
}

type StudentLocal struct {
	Id       int
	Name     string
	Age      int
	Sex      string
	CreateAt LocalTime
}

// TableName 指定表名
func (StudentLocal) TableName() string {
	return "student"
}

var db *gorm.DB
var err error

func init() {
	//dsn格式 user:pass@tcp(ip:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local
	dsn := "user:pass@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "",   // 表前缀
			SingularTable: true, // 禁用表名复数
		}})
	if err != nil {
		panic(err)
	}
}

func main() {
	var student Student
	db.First(&student) // 取第一条到student
	js, _ := json.Marshal(student)
	fmt.Println(string(js))
	// {"Id":1,"Name":"张三","Age":20,"Sex":"男","CreateAt":"2022-12-06T17:49:06+08:00"}

	var studentLocal StudentLocal
	db.First(&studentLocal) // 取第一条到student

	js, _ = json.Marshal(studentLocal)
	fmt.Println(string(js))
	// {"Id":1,"Name":"张三","Age":20,"Sex":"男","CreateAt":"2022-12-06 17:49:06"}

	b, _ := studentLocal.CreateAt.MarshalJSON()
	fmt.Println(string(b))
	// "2022-12-06 17:49:06"

	value, _ := studentLocal.CreateAt.Value()
	fmt.Println(value)
	// 2022-12-06 17:49:06
}

到此这篇关于go语言中gorm时间格式化的文章就介绍到这了,更多相关gorm时间格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang Copier入门到入坑探究

    Golang Copier入门到入坑探究

    这篇文章主要为大家介绍了Golang Copier入门到入坑探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Go实现后台任务调度系统的实例代码

    Go实现后台任务调度系统的实例代码

    平常我们在开发API的时候,前端传递过来的大批数据需要经过后端处理,如果后端处理的速度快,前端响应就快,反之则很慢,影响用户体验,为了解决这一问题,需要我们自己实现后台任务调度系统,本文将介绍如何用Go语言实现后台任务调度系统,需要的朋友可以参考下
    2023-06-06
  • Go语言中的上下文取消操作详解

    Go语言中的上下文取消操作详解

    这篇文章主要给大家介绍了关于Go语言中上下文取消操作的相关资料,本文将解释我们如何利用上下文库的取消特性,并通过一些模式和最佳实践来使用取消,使你的程序更快、更健壮。需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07
  • Go语言开发保证并发安全实例详解

    Go语言开发保证并发安全实例详解

    这篇文章主要为大家介绍了Go语言开发保证并发安全实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Golang内存管理之垃圾收集器详解

    Golang内存管理之垃圾收集器详解

    这篇文章我们主要介绍垃圾收集器的设计原理以及Golang垃圾收集器的实现原理,文中有详细的代码示例及图文介绍,感兴趣的小伙伴跟着小编一起来学习吧
    2023-06-06
  • Golang交叉编译之跨平台编译使用详解

    Golang交叉编译之跨平台编译使用详解

    这篇文章主要为大家介绍了Golang交叉编译之跨平台编译使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • go判断文件夹是否存在并创建的实例

    go判断文件夹是否存在并创建的实例

    这篇文章主要介绍了go判断文件夹是否存在,并创建的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go使用chan或context退出协程示例详解

    Go使用chan或context退出协程示例详解

    这篇文章主要为大家介绍了Go使用chan或context退出协程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 解决Golang在Web开发时前端莫名出现的空白换行

    解决Golang在Web开发时前端莫名出现的空白换行

    最近在使用Go语言开发Web时,在前端莫名出现了空白换行,找了网上的一些资料终于找到了解决方法,现在分享给大家,有需要的可以参考。
    2016-08-08
  • Go语言中的Iota关键字

    Go语言中的Iota关键字

    这篇文章介绍了Go语言中的Iota关键字,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论