package feed import ( "encoding/json" "fmt" // "strconv" "regexp" "time" ) // partial timestamp type Time time.Time var timeRe = regexp.MustCompile("\\A\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}Z\\z") // Unmarshal timestamp from JSON. func (me *Time) UnmarshalJSON(b []byte) error { // decode string, check for error var s string if err := json.Unmarshal(b, &s); err != nil { return err } // match partial string regex if !timeRe.MatchString(s) { return fmt.Errorf("invalid time: \"%s\"", s) } // correct string suffix s = s[0:16] + ":00Z" // unmarshal time var t time.Time if err := t.UnmarshalText([]byte(s)); err != nil { return err } // save time *me = Time(t) // return success return nil } // Marshal time. func (me *Time) MarshalText() ([]byte, error) { return time.Time(*me).MarshalText() }