Fix tests: Need to write proper date unmarshalling also
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
@@ -8,7 +9,11 @@ import (
|
||||
type Date time.Time
|
||||
|
||||
func (d Date) Equal(other Date) bool {
|
||||
return time.Time(d).Equal(time.Time(other))
|
||||
// usec and nsec are lost in ISO8601 conversion
|
||||
dr := time.Time(d).Round(time.Minute)
|
||||
or := time.Time(other).Round(time.Minute)
|
||||
|
||||
return dr.Equal(or)
|
||||
}
|
||||
|
||||
func (d Date) After(other Date) bool {
|
||||
@@ -23,8 +28,26 @@ func (d Date) Format(layout string) string {
|
||||
return time.Time(d).Format(layout)
|
||||
}
|
||||
|
||||
func (t Date) MarshalJSON() ([]byte, error) {
|
||||
func (d Date) MarshalJSON() ([]byte, error) {
|
||||
// Must use ISO8601
|
||||
formatted := fmt.Sprintf("\"%s\"", time.Time(t).Format("2006-01-02T15:04:05+00:00"))
|
||||
formatted := fmt.Sprintf("\"%s\"", time.Time(d).Format("2006-01-02T15:04:05+00:00"))
|
||||
return []byte(formatted), nil
|
||||
}
|
||||
|
||||
func (d *Date) UnmarshalJSON(data []byte) error {
|
||||
if len(data) < 2 || data[0] != '"' || data[len(data)-1] != '"' {
|
||||
return errors.New("Time.UnmarshalJSON: input is not a JSON string")
|
||||
}
|
||||
|
||||
data = data[len(`"`) : len(data)-len(`"`)]
|
||||
|
||||
var err error
|
||||
var t time.Time
|
||||
t, err = time.ParseInLocation("2006-01-02T15:04:05+00:00", string(data), time.Now().Location())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*d = Date(t)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user