43 lines
828 B
Go
43 lines
828 B
Go
package model
|
|
|
|
import (
|
|
sqldriver "database/sql/driver"
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
type Time time.Time
|
|
|
|
func MakeTimeNow() Time {
|
|
return Time(time.Now().UTC())
|
|
}
|
|
|
|
func (self Time) AsUTCString() string {
|
|
return time.Time(self).Format(time.RFC3339)
|
|
}
|
|
|
|
func (self Time) Value() (sqldriver.Value, error) {
|
|
return self.AsUTCString(), nil
|
|
}
|
|
|
|
func (self *Time) Scan(value any) error {
|
|
if valueStr, ok := value.(string); ok {
|
|
parsedTime, err := time.Parse(time.RFC3339, valueStr)
|
|
if err == nil {
|
|
*self = Time(parsedTime.UTC())
|
|
}
|
|
return err
|
|
} else {
|
|
return errors.New("Expected a string")
|
|
}
|
|
}
|
|
|
|
func (from Time) Compare(to Time) int {
|
|
return time.Time(from).Compare(time.Time(to))
|
|
}
|
|
|
|
func (self *Time) Add(duration time.Duration) {
|
|
*self = Time(time.Time(*self).Add(duration))
|
|
}
|
|
|