| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package util
- import (
- "database/sql/driver"
- "fmt"
- "time"
- )
- type JSON = map[string]interface{}
- // JSONTime format json time field by myself
- type JSONTime struct {
- time.Time
- }
- // MarshalJSON on JSONTime format Time field with %Y-%m-%d %H:%M:%S
- func (t JSONTime) UnmarshalJSON(b []byte) (err error) {
- t.Time, err = time.ParseInLocation(`"`+"2006-01-02 15:04:05"+`"`, string(b), time.Local)
- return
- }
- // MarshalJSON on JSONTime format Time field with %Y-%m-%d %H:%M:%S
- func (t JSONTime) MarshalJSON() ([]byte, error) {
- formatted := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05"))
- return []byte(formatted), nil
- }
- func (t JSONTime) String() string {
- return fmt.Sprintf("%s", t.Format("2006-01-02 15:04:05"))
- }
- // Value insert timestamp into mysql need this function.
- func (t JSONTime) Value() (driver.Value, error) {
- var zeroTime time.Time
- if t.Time.UnixNano() == zeroTime.UnixNano() {
- return nil, nil
- }
- return t.Time, nil
- }
- // Scan valueof time.Time
- func (t *JSONTime) Scan(v interface{}) error {
- value, ok := v.(time.Time)
- if ok {
- *t = JSONTime{Time: value}
- return nil
- }
- return fmt.Errorf("can not convert %v to timestamp", v)
- }
|