package policy import ( "fmt" "time" ) type Time struct { Hour int Minute int Second int } func (t Time) Eq(other Time) bool { return t.Hour == other.Hour && t.Minute == other.Minute && t.Second == other.Second } func (t Time) After(other Time) bool { return t.Seconds() > other.Seconds() } func (t Time) Before(other Time) bool { return t.Seconds() < other.Seconds() } func (t Time) Seconds() int { return t.Hour*3600 + t.Minute*60 + t.Second } func (t Time) MarshalJSON() ([]byte, error) { return []byte(fmt.Sprintf(`"%02d:%02d:%02d"`, t.Hour, t.Minute, t.Second)), nil } var timeFormats = []string{ time.TimeOnly, "15:04", time.Kitchen, } func Now() Time { now := time.Now() return Time{now.Hour(), now.Minute(), now.Second()} } func ParseTime(s string) (t Time, err error) { var tt time.Time for _, layout := range timeFormats { if tt, err = time.Parse(layout, s); err == nil { return Time{tt.Hour(), tt.Minute(), tt.Second()}, nil } } return Time{}, fmt.Errorf("time: invalid time %q", s) }