• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
车车大人
博客园    首页    新随笔    联系   管理     

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类型(但是这个时间会带有时区)

通往牛逼的路上,在意的只有远方!
posted @ 2023-06-02 09:37  车车大人  阅读(435)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3