time.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package initialize
  2. import (
  3. "database/sql/driver"
  4. "fmt"
  5. "time"
  6. )
  7. const timeFormat = "2006-01-02 15:04:05"
  8. const timezone = "Asia/Shanghai"
  9. const dateFormat = "2006-01-02"
  10. // 全局定义
  11. type Time time.Time
  12. func (t Time) MarshalJSON() ([]byte, error) {
  13. b := make([]byte, 0, len(timeFormat)+2)
  14. if time.Time(t).IsZero() {
  15. b = append(b, '"')
  16. b = append(b, '"')
  17. return b, nil
  18. }
  19. b = append(b, '"')
  20. b = time.Time(t).AppendFormat(b, timeFormat)
  21. b = append(b, '"')
  22. return b, nil
  23. }
  24. func (t *Time) UnmarshalJSON(data []byte) (err error) {
  25. now, err := time.ParseInLocation(`"`+timeFormat+`"`, string(data), time.Local)
  26. *t = Time(now)
  27. return
  28. }
  29. func (t Time) String() string {
  30. if time.Time(t).IsZero() {
  31. return ""
  32. }
  33. return time.Time(t).Format(timeFormat)
  34. }
  35. func (t Time) Local() time.Time {
  36. loc, _ := time.LoadLocation(timezone)
  37. return time.Time(t).In(loc)
  38. }
  39. func (t Time) Value() (driver.Value, error) {
  40. var zeroTime time.Time
  41. var ti = time.Time(t)
  42. if ti.UnixNano() == zeroTime.UnixNano() {
  43. return nil, nil
  44. }
  45. return ti, nil
  46. }
  47. func (t *Time) Scan(v interface{}) error {
  48. value, ok := v.(time.Time)
  49. if ok {
  50. *t = Time(value)
  51. return nil
  52. }
  53. return fmt.Errorf("can not convert %v to timestamp", v)
  54. }