package models import ( "strings" "time" ) type LocalTime time.Time func init() { AddTableName("local_time") } const ( timeFormat = "2006-01-02 15:04:05" ) func NowLocal() LocalTime { return LocalTime(time.Now()) } func (t *LocalTime) UnmarshalJSON(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 == "0001-01-01 00:00:00" { dataStr = timeFormat } } 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) MarshalJSON() ([]byte, error) { b := make([]byte, 0, len(timeFormat)+2) b = append(b, '"') b = time.Time(t).AppendFormat(b, timeFormat) b = append(b, '"') return b, nil }