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類型(但是這個時間會帶有時區)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章