Files
styx/proxy/policy/time.go
2025-09-26 08:49:53 +02:00

54 lines
1.0 KiB
Go

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)
}