LocalTime.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package models
  2. import (
  3. "strings"
  4. "time"
  5. )
  6. type LocalTime time.Time
  7. func init() {
  8. AddTableName("local_time")
  9. }
  10. const (
  11. timeFormat = "2006-01-02 15:04:05"
  12. )
  13. func NowLocal() LocalTime {
  14. return LocalTime(time.Now())
  15. }
  16. func (t *LocalTime) UnmarshalJSON(data []byte) error {
  17. if data[0] == '"' && data[len(data)-1] == '"' {
  18. data = data[1 : len(data)-1]
  19. }
  20. dataStr := strings.TrimSpace(string(data))
  21. if dataStr == "" {
  22. now, err := time.ParseInLocation(timeFormat, string(data), time.Local)
  23. *t = LocalTime(now)
  24. return err
  25. }
  26. var err error
  27. var now time.Time
  28. if strings.Index(dataStr, "T") > 0 {
  29. dataStr = strings.Replace(dataStr, "T", " ", 1)
  30. }
  31. if len(dataStr) > 19 {
  32. dataStr = dataStr[0:19]
  33. if dataStr == "0001-01-01 00:00:00" {
  34. dataStr = timeFormat
  35. }
  36. } else if len(dataStr) == 10 {
  37. dataStr += " 00:00:00"
  38. } else if len(dataStr) == 13 {
  39. dataStr += ":00:00"
  40. } else if len(dataStr) == 16 {
  41. dataStr += ":00"
  42. }
  43. now, err = time.ParseInLocation(timeFormat, dataStr, time.Local)
  44. *t = LocalTime(now)
  45. return err
  46. }
  47. func (t LocalTime) MarshalJSON() ([]byte, error) {
  48. b := make([]byte, 0, len(timeFormat)+2)
  49. b = append(b, '"')
  50. b = time.Time(t).AppendFormat(b, timeFormat)
  51. b = append(b, '"')
  52. return b, nil
  53. }