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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM