|
|
- package models
-
- import (
- "database/sql/driver"
- "fmt"
- "time"
- )
-
- /* 自定义时间格式 */
- var timeFormart = "2006-01-02 15:04:05" // time.RFC3339
-
- // JSONTime 时间格式别名
- type JSONTime time.Time
-
- // UnmarshalJSON 字节转为JSONTime对象
- func (t *JSONTime) UnmarshalJSON(data []byte) (err error) {
- now, err := time.ParseInLocation(`"`+timeFormart+`"`, string(data), time.UTC)
- *t = JSONTime(now)
- return
- }
-
- // MarshalJSON 将时间对象转为字节
- func (t JSONTime) MarshalJSON() ([]byte, error) {
- b := make([]byte, 0, len(timeFormart)+2)
- b = append(b, '"')
- b = time.Time(t).Local().AppendFormat(b, timeFormart)
- b = append(b, '"')
- return b, nil
- }
-
- // String 格式化为文本
- func (t JSONTime) String() string {
- return time.Time(t).Format(timeFormart)
- }
-
- // Format 格式化函数
- func (t JSONTime) Format(format string) string {
- return time.Time(t).Format(timeFormart)
- }
-
- // Value insert timestamp into mysql need this function.
- func (t JSONTime) Value() (driver.Value, error) {
- var zeroTime time.Time
- var ti = time.Time(t)
- if ti.UnixNano() == zeroTime.UnixNano() {
- return nil, nil
- }
- return ti, nil
- }
-
- // Scan valueof time.Time
- func (t *JSONTime) Scan(v interface{}) error {
- value, ok := v.(time.Time)
- if ok {
- *t = JSONTime(value)
- return nil
- }
- return fmt.Errorf("can not convert %v to timestamp", v)
- }
|