| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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
- }
- 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 {
- return t.UnmarshalJSON(data)
- }
- // 对象解析到数据库时调用
- 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
- }
|