12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package utils
- import (
- "database/sql/driver"
- "time"
- )
- // FormatTime format time
- type FormatTime string
- // NewFormatTime net formatTime
- func NewFormatTime(t time.Time) FormatTime {
- ft := new(FormatTime)
- ft.Scan(t)
- return *ft
- }
- // Scan scan time.
- func (jt *FormatTime) Scan(src interface{}) (err error) {
- switch sc := src.(type) {
- case time.Time:
- *jt = FormatTime(sc.Format("2006-01-02 15:04:05"))
- case string:
- *jt = FormatTime(sc)
- }
- return
- }
- // Value get string value.
- func (jt FormatTime) Value() (driver.Value, error) {
- return string(jt), nil
- }
- // TimeValue get time value.
- func (jt FormatTime) TimeValue() time.Time {
- t, _ := time.ParseInLocation("2006-01-02 15:04:05", string(jt), time.Local)
- if t.Unix() <= 0 {
- t, _ = time.ParseInLocation("2006-01-02 15:04:05", "0000-00-00 00:00:00", time.Local)
- }
- return t
- }
- // UnmarshalJSON implement Unmarshaler
- func (jt *FormatTime) UnmarshalJSON(data []byte) error {
- if data == nil || len(data) <= 1 {
- *jt = FormatTime("0000-00-00 00:00:00")
- return nil
- }
- str := string(data[1 : len(data)-1])
- st, err := time.Parse(time.RFC3339, str)
- if err == nil {
- *jt = FormatTime(st.Format("2006-01-02 15:04:05"))
- } else {
- *jt = FormatTime(str)
- }
- return nil
- }
|