package shared import ( "strconv" "strings" "time" ) // UnixTimestamp is a time.Time that can parse unix timestamps type UnixTimestamp time.Time // UnmarshalText implements encoding.TextUnmarshaler func (t *UnixTimestamp) UnmarshalText(b []byte) error { i, err := strconv.ParseInt(string(b), 10, 64) if err != nil { return err } var tt time.Time if len(b) > 10 { tt = time.Unix(0, i) } else { tt = time.Unix(i, 0) } *t = UnixTimestamp(tt) return nil } // UnmarshalJSON implements json.Unmarshaler func (t *UnixTimestamp) UnmarshalJSON(b []byte) error { parts := strings.Split(string(b), `.`) if len(parts) == 1 { return t.UnmarshalText(b) } i, err := strconv.ParseInt(parts[0], 10, 64) if err != nil { return err } inano, err := strconv.ParseInt(parts[1], 10, 64) if err != nil { return err } var tt time.Time tt = time.Unix(i, inano*100) *t = UnixTimestamp(tt) return nil } func (t UnixTimestamp) String() string { return time.Time(t).Format(`2006-01-02 15:04:05.999999`) }