time.go 894 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package utils
  2. import (
  3. "strings"
  4. "time"
  5. )
  6. const (
  7. TimeFormat = "2006-01-02 15:04:05"
  8. ZeroTime = "1970-01-01 00:00:00"
  9. )
  10. func ParseTime(str string) time.Time {
  11. data := []byte(str)
  12. if data[0] == '"' && data[len(data)-1] == '"' {
  13. data = data[1 : len(data)-1]
  14. }
  15. dataStr := strings.TrimSpace(string(data))
  16. if dataStr == "" {
  17. now, _ := time.ParseInLocation(TimeFormat, ZeroTime, time.Local)
  18. return now
  19. }
  20. var now time.Time
  21. if strings.Index(dataStr, "T") > 0 {
  22. dataStr = strings.Replace(dataStr, "T", " ", 1)
  23. }
  24. if len(dataStr) > 19 {
  25. dataStr = dataStr[0:19]
  26. if strings.Index(dataStr, "000") == 0 {
  27. dataStr = ZeroTime
  28. }
  29. } else if len(dataStr) == 10 {
  30. dataStr += " 00:00:00"
  31. } else if len(dataStr) == 13 {
  32. dataStr += ":00:00"
  33. } else if len(dataStr) == 16 {
  34. dataStr += ":00"
  35. }
  36. now, _ = time.ParseInLocation(TimeFormat, dataStr, time.Local)
  37. return now
  38. }