gorm查詢時間去掉時區問題
阿新 • • 發佈:2022-04-07
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型別(但是這個時間會帶有時區)