36 lines
806 B
Go
36 lines
806 B
Go
|
package arukas
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// JSONTime is time.Time that serializes as unix timestamp (in microseconds).
|
||
|
type JSONTime time.Time
|
||
|
|
||
|
// UnmarshalJSON sets *t to a copy of data.
|
||
|
func (t *JSONTime) UnmarshalJSON(data []byte) (err error) {
|
||
|
parsed, err := time.Parse(`"`+time.RFC3339Nano+`"`, string(data))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
*t = JSONTime(parsed)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// MarshalJSON returns t as the JSON encoding of t.
|
||
|
func (t JSONTime) MarshalJSON() ([]byte, error) {
|
||
|
stamp := fmt.Sprintf("\"%s\"", time.Time(t).Format(time.RFC3339Nano))
|
||
|
return []byte(stamp), nil
|
||
|
}
|
||
|
|
||
|
// String return t as the string of t.
|
||
|
func (t JSONTime) String() string {
|
||
|
return time.Time(t).Format(time.RFC3339Nano)
|
||
|
}
|
||
|
|
||
|
// Time return t as the time of t.
|
||
|
func (t JSONTime) Time() time.Time {
|
||
|
return time.Time(t)
|
||
|
}
|