|
|
@@ -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))
|
|
|
@@ -66,3 +67,58 @@ func (t LocalTime) MarshalJSON() ([]byte, error) {
|
|
|
|
|
|
return b, nil
|
|
|
}
|
|
|
+
|
|
|
+func (t LocalTime) Value() time.Time {
|
|
|
+ return time.Time(t)
|
|
|
+}
|
|
|
+
|
|
|
+func (t LocalTime) String() string {
|
|
|
+ return t.Value().String()
|
|
|
+}
|
|
|
+
|
|
|
+// 数据库解析到对象时调用
|
|
|
+func (t *LocalTime) FromDB(data []byte) error {
|
|
|
+ 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)
|
|
|
+ b = append(b, []byte(time.Time(t).Format(timeFormat))...)
|
|
|
+ return b, nil
|
|
|
+}
|