Ver Fonte

修改时间对象解析

wuww há 6 anos atrás
pai
commit
6e952c20fd
1 ficheiros alterados com 40 adições e 4 exclusões
  1. 40 4
      models/LocalTime.go

+ 40 - 4
models/LocalTime.go

@@ -7,12 +7,13 @@ import (
 
 type LocalTime time.Time
 
-func  init()  {
+func init() {
 	AddTableName("local_time")
 }
 
 const (
 	timeFormat = "2006-01-02 15:04:05"
+	zeroTime   = "0001-01-01 00:00:00"
 )
 
 func NowLocal() LocalTime {
@@ -21,7 +22,7 @@ func NowLocal() LocalTime {
 
 func (t *LocalTime) UnmarshalJSON(data []byte) error {
 	if data[0] == '"' && data[len(data)-1] == '"' {
-		data = data[1 : len(data)-1]
+		data = data[1: len(data)-1]
 	}
 
 	dataStr := strings.TrimSpace(string(data))
@@ -67,7 +68,6 @@ func (t LocalTime) MarshalJSON() ([]byte, error) {
 	return b, nil
 }
 
-
 func (t LocalTime) Value() time.Time {
 	return time.Time(t)
 }
@@ -78,8 +78,44 @@ func (t LocalTime) String() string {
 
 // 数据库解析到对象时调用
 func (t *LocalTime) FromDB(data []byte) error {
-	return t.UnmarshalJSON(data)
+	if data[0] == '"' && data[len(data)-1] == '"' {
+		data = data[1: len(data)-1]
+	}
+
+	dataStr := strings.TrimSpace(string(data))
+	if dataStr == "" {
+		now, err := time.ParseInLocation(timeFormat, string(data), time.Local)
+		*t = LocalTime(now)
+		return err
+	}
+
+	var err error
+	var now time.Time
+
+	if strings.Index(dataStr, "T") > 0 {
+		dataStr = strings.Replace(dataStr, "T", " ", 1)
+	}
+
+	if len(dataStr) > 19 {
+		dataStr = dataStr[0:19]
+		if dataStr == "0000-00-00 00:00:00" {
+			dataStr = zeroTime
+		}
+	} else if len(dataStr) == 10 {
+		dataStr += " 00:00:00"
+	} else if len(dataStr) == 13 {
+		dataStr += ":00:00"
+	} else if len(dataStr) == 16 {
+		dataStr += ":00"
+	}
+
+	now, err = time.ParseInLocation(timeFormat, dataStr, time.Local)
+
+	*t = LocalTime(now)
+
+	return err
 }
+
 // 对象解析到数据库时调用
 func (t LocalTime) ToDB() ([]byte, error) {
 	b := make([]byte, 0, len(timeFormat)+2)