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