• gorm查询时间去掉时区问题


    gorm查询的时间格式是2022-03-03T14:32:05+08:00,这种格式不符合我们日常使用习惯,尤其是前端展示会额外占用单元格宽度

    gorm不提供时间格式的配置,只能自定义个一个类型,继承time.Time,上代码,这个是网上一搜一堆的代码,没啥可以说的

    package utils
    
    import (
    	"database/sql/driver"
    	"fmt"
    	"time"
    )
    
    // 1. 创建 time.Time 类型的副本 XTime;
    type MyTime struct {
    	time.Time
    }
    
    // 2. 为 Xtime 重写 MarshaJSON 方法,在此方法中实现自定义格式的转换;
    func (t MyTime) MarshalJSON() ([]byte, error) {
    	output := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05"))
    	return []byte(output), nil
    }
    
    // 3. 为 Xtime 实现 Value 方法,写入数据库时会调用该方法将自定义时间类型转换并写入数据库;
    func (t MyTime) Value() (driver.Value, error) {
    	var zeroTime time.Time
    	if t.Time.UnixNano() == zeroTime.UnixNano() {
    		return nil, nil
    	}
    	return t.Time, nil
    }
    
    // 4. 为 Xtime 实现 Scan 方法,读取数据库时会调用该方法将时间数据转换成自定义时间类型;
    func (t *MyTime) Scan(v interface{}) error {
    	value, ok := v.(time.Time)
    	if ok {
    		*t = MyTime{Time: value}
    		return nil
    	}
    	return fmt.Errorf("can not convert %v to timestamp", v)
    } 

    下面就是我们怎么在代码里使用:

    1、utils.MyTime{Time: time.Now()} 初始化当前的时间就是time.Now()

    2、utils.MyTime{Time: scriptResult.Info.ExecTime} 将time.Time类型转成utils.MyTime类型

    3、utils.MyTime时间变量后面加.Time,可以转换成time.Time类型(但是这个时间会带有时区)

  • 相关阅读:
    Sun开发的JINI技术在网络中的应用
    让memcached和mysql更好的工作
    Nginx+Tomcat+memcached负载均衡实现session共享
    Nginx 简单的负载均衡配置示例
    数据库sharding(scale up to scale out)
    docker专题(2):docker常用管理命令(上)
    UMDF
    编程精粹:编写高质量的C语言代码———笔记一
    子矩阵中共享1的最长对角线
    Print the numbers between 30 to 3000.
  • 原文地址:https://www.cnblogs.com/gangdou/p/16112759.html
Copyright © 2020-2023  润新知