package main import ( "fmt" "strconv" "time" ) func unmarshalTime(s []byte) (time.Time, error) { r := string(s) q, err := strconv.ParseInt(r, 10, 64) if err != nil { return time.Now(), err } return time.Unix(q, 0), nil } type CurrentDate time.Time func (t *CurrentDate) UnmarshalJSON(s []byte) (err error) { *(*time.Time)(t), err = unmarshalTime(s) return err } func (t CurrentDate) String() string { return time.Time(t).Format("2006-01-02, 15h") } type HourOnly time.Time func (t *HourOnly) UnmarshalJSON(s []byte) (err error) { *(*time.Time)(t), err = unmarshalTime(s) return err } func (t HourOnly) String() string { return time.Time(t).Format("15h") } type Day time.Time func (t *Day) UnmarshalJSON(s []byte) (err error) { *(*time.Time)(t), err = unmarshalTime(s) return err } func (t Day) String() string { return time.Time(t).Format("Mon") } type Hour time.Time func (t *Hour) UnmarshalJSON(s []byte) (err error) { *(*time.Time)(t), err = unmarshalTime(s) return err } func (t Hour) String() string { return time.Time(t).Format("15:04:05") } type Temperature float64 func (t Temperature) String() string { return fmt.Sprintf("%.0f", t) }