localTime.go 952 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package typeManage
  2. import (
  3. "database/sql/driver"
  4. "fmt"
  5. "time"
  6. )
  7. type LocalTime struct {
  8. time.Time
  9. }
  10. // 2. 为 Xtime 重写 MarshaJSON 方法,在此方法中实现自定义格式的转换;
  11. func (t LocalTime) MarshalJSON() ([]byte, error) {
  12. output := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05"))
  13. return []byte(output), nil
  14. }
  15. // 3. 为 Xtime 实现 Value 方法,写入数据库时会调用该方法将自定义时间类型转换并写入数据库;
  16. func (t LocalTime) Value() (driver.Value, error) {
  17. var zeroTime time.Time
  18. if t.Time.UnixNano() == zeroTime.UnixNano() {
  19. return nil, nil
  20. }
  21. return t.Time, nil
  22. }
  23. // 4. 为 Xtime 实现 Scan 方法,读取数据库时会调用该方法将时间数据转换成自定义时间类型;
  24. func (t *LocalTime) Scan(v interface{}) error {
  25. value, ok := v.(time.Time)
  26. if ok {
  27. *t = LocalTime{Time: value}
  28. return nil
  29. }
  30. return fmt.Errorf("can not convert %v to timestamp", v)
  31. }