go從gorm讀取數據庫時間字段問題

go從gorm讀取數據庫時間字段問題,莫名加了時區和T,要重寫time的方法才能轉化過來

 

package utils

import (
   "database/sql/driver"
   "errors"
   "fmt"
   "strings"
   "time"
)

type FormatTime time.Time

const timeLayout = "2006-01-02"

func (t *FormatTime) UnmarshalJSON(data []byte) (err error) {
   str := string(data)
   if str == "" {
      return nil
   }
   trim := strings.Trim(str, "\"")
   parse, err := time.Parse(timeLayout, trim)

   *t = FormatTime(parse)
   return err
}

func (t FormatTime) MarshalJSON() ([]byte, error) {
   if time.Time(t).IsZero() {
      return []byte(`""`), nil
   }
   formatTime := fmt.Sprintf("\"%v\"", time.Time(t).Format(timeLayout))
   return []byte(formatTime), nil
}

func (t FormatTime) Value() (driver.Value, error) {
   fTime := time.Time(t)
   return fTime.Format(timeLayout), nil
}

func (t *FormatTime) Scan(v interface{}) error {
   switch vt := v.(type) {
   case time.Time:
      *t = FormatTime(vt)
   default:
      return errors.New("傳入類型錯誤")
   }
   return nil
}

func (t *FormatTime) String() string {
   return fmt.Sprintf("hhh:%s", time.Time(*t).String())
}

 

使用方法

FromDate      utils.FormatTime `gorm:"column:from_date" db:"from_date" json:"from_date" form:"from_date"` 

結構體裏面用utils.FormatTime轉化就可以了。

 

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