目录
功能
代码
功能
数据库或者接口时间类型,经常会使用14位的时间格式。每次都转换有点麻烦。可以自定义一个时间类型。
自定义类型需要实现json接口中的MarshalJSON与UnmarshalJSON两个函数,这样在做json编码解码时就会自动转为14位的时间格式了。
代码
package htimeimport ("errors""fmt""strings""time"
)const (LayoutT14 = "20060102150405"
)type T14 time.Timefunc (nt T14) String() string {return time.Time(nt).Local().Format(LayoutT14)
}// MarshalJSON JSON编码
func (nt T14) MarshalJSON() ([]byte, error) {t := time.Time(nt).Local()if y := t.Year(); y < 0 || y >= 10000 {return nil, errors.New("Time.MarshalJSON: year outside of range [0,9999]")}b := make([]byte, 0, len(LayoutT14)+2)b = append(b, '"')if !t.IsZero() {b = t.AppendFormat(b, LayoutT14)}b = append(b, '"')return b, nil
}// UnmarshalJSON JSON解码
func (nt *T14) UnmarshalJSON(data []byte) error {v := strings.Trim(string(data), "\"")if data == nil || v == "" {*nt = T14(time.Time{})return nil}t, err := time.ParseInLocation(LayoutT14, v, time.Local)if err != nil {return fmt.Errorf("解析时间字符串'%s'出错", v)}*nt = T14(t.Local())return err
}// NowF14 取当前格式化时间
func NowF14() string {return T14(time.Now()).String()
}// ParseT14 解析时间
func ParseT14(t14 string) time.Time {t14Time, err := time.ParseInLocation(LayoutT14, t14, time.Local)if err != nil {return time.Time{}}return t14Time
}
以上代码实现了14位yyyyMMddHHmmss时间的编码与解码。