package rfctime import ( "encoding/json" "strconv" "time" ) type UnixNanoTime time.Time func (t UnixNanoTime) Time() time.Time { return time.Time(t) } func (t UnixNanoTime) MarshalBinary() ([]byte, error) { return (time.Time)(t).MarshalBinary() } func (t *UnixNanoTime) UnmarshalBinary(data []byte) error { return (*time.Time)(t).UnmarshalBinary(data) } func (t UnixNanoTime) GobEncode() ([]byte, error) { return (time.Time)(t).GobEncode() } func (t *UnixNanoTime) GobDecode(data []byte) error { return (*time.Time)(t).GobDecode(data) } func (t *UnixNanoTime) UnmarshalJSON(data []byte) error { str := "" if err := json.Unmarshal(data, &str); err != nil { return err } t0, err := strconv.ParseInt(str, 10, 64) if err != nil { return err } *t = UnixNanoTime(time.Unix(0, t0)) return nil } func (t UnixNanoTime) MarshalJSON() ([]byte, error) { str := strconv.FormatInt(t.Time().UnixNano(), 10) return json.Marshal(str) } func (t UnixNanoTime) MarshalText() ([]byte, error) { return []byte(strconv.FormatInt(t.Time().UnixNano(), 10)), nil } func (t *UnixNanoTime) UnmarshalText(data []byte) error { t0, err := strconv.ParseInt(string(data), 10, 64) if err != nil { return err } *t = UnixNanoTime(time.Unix(0, t0)) return nil } func (t UnixNanoTime) Serialize() string { return strconv.FormatInt(t.Time().UnixNano(), 10) } func (t UnixNanoTime) After(u RFCTime) bool { return t.Time().After(u.Time()) } func (t UnixNanoTime) Before(u RFCTime) bool { return t.Time().Before(u.Time()) } func (t UnixNanoTime) Equal(u RFCTime) bool { return t.Time().Equal(u.Time()) } func (t UnixNanoTime) IsZero() bool { return t.Time().IsZero() } func (t UnixNanoTime) Date() (year int, month time.Month, day int) { return t.Time().Date() } func (t UnixNanoTime) Year() int { return t.Time().Year() } func (t UnixNanoTime) Month() time.Month { return t.Time().Month() } func (t UnixNanoTime) Day() int { return t.Time().Day() } func (t UnixNanoTime) Weekday() time.Weekday { return t.Time().Weekday() } func (t UnixNanoTime) ISOWeek() (year, week int) { return t.Time().ISOWeek() } func (t UnixNanoTime) Clock() (hour, min, sec int) { return t.Time().Clock() } func (t UnixNanoTime) Hour() int { return t.Time().Hour() } func (t UnixNanoTime) Minute() int { return t.Time().Minute() } func (t UnixNanoTime) Second() int { return t.Time().Second() } func (t UnixNanoTime) Nanosecond() int { return t.Time().Nanosecond() } func (t UnixNanoTime) YearDay() int { return t.Time().YearDay() } func (t UnixNanoTime) Add(d time.Duration) UnixNanoTime { return UnixNanoTime(t.Time().Add(d)) } func (t UnixNanoTime) Sub(u RFCTime) time.Duration { return t.Time().Sub(u.Time()) } func (t UnixNanoTime) AddDate(years int, months int, days int) UnixNanoTime { return UnixNanoTime(t.Time().AddDate(years, months, days)) } func (t UnixNanoTime) Unix() int64 { return t.Time().Unix() } func (t UnixNanoTime) UnixMilli() int64 { return t.Time().UnixNano() } func (t UnixNanoTime) UnixMicro() int64 { return t.Time().UnixMicro() } func (t UnixNanoTime) UnixNano() int64 { return t.Time().UnixNano() } func (t UnixNanoTime) Format(layout string) string { return t.Time().Format(layout) } func (t UnixNanoTime) GoString() string { return t.Time().GoString() } func (t UnixNanoTime) String() string { return t.Time().String() } func NewUnixNano(t time.Time) UnixNanoTime { return UnixNanoTime(t) } func NowUnixNano() UnixNanoTime { return UnixNanoTime(time.Now()) }