diff --git a/grmi/Date.go b/grmi/Date.go new file mode 100644 index 0000000..b73e111 --- /dev/null +++ b/grmi/Date.go @@ -0,0 +1,31 @@ +package grmi + +import ( + "encoding/json" + "fmt" + "time" +) + +type Date time.Time + +func (self Date) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf("\"%s\"", time.Time(self).Format(URLDateFormat))), nil +} + +func (self *Date) UnmarshalJSON(data []byte) error { + var jsonString string + err := json.Unmarshal(data, &jsonString) + if err != nil { + return err + } + result, err := time.Parse(URLDateFormat, jsonString) + if err != nil { + return err + } + *self = Date(result) + return nil +} + +func (self *Date) Restore() time.Time { + return time.Time(*self) +} diff --git a/grmi/grmi.go b/grmi/grmi.go index 25c3fd3..e59f779 100644 --- a/grmi/grmi.go +++ b/grmi/grmi.go @@ -15,6 +15,7 @@ type GoType int const ( URLDateTimeFormat = "20060102150405" + URLDateFormat = "20060102" ) const ( @@ -30,6 +31,7 @@ const ( TypeUint64 TypeFloat32 TypeFloat64 + TypeDate TypeDateTime TypeBool TypeString