times are now unix dates over ints
parent
cb4886992a
commit
a27d5c38d7
25
pttodo/ts.go
25
pttodo/ts.go
|
|
@ -2,7 +2,10 @@ package pttodo
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type TS int64
|
||||
|
|
@ -23,5 +26,25 @@ func (ts TS) MarshalYAML() (interface{}, error) {
|
|||
if ts == 0 {
|
||||
ts = TS(time.Now().Unix())
|
||||
}
|
||||
return int64(ts), nil
|
||||
t := time.Unix(int64(ts), 0)
|
||||
return t.Format(time.UnixDate), nil
|
||||
}
|
||||
|
||||
func (ts *TS) UnmarshalJSON(b []byte) error {
|
||||
return yaml.Unmarshal(b, ts)
|
||||
}
|
||||
|
||||
func (ts *TS) UnmarshalYAML(unmarshaller func(interface{}) error) error {
|
||||
var n int64
|
||||
if err := unmarshaller(&n); err == nil {
|
||||
*ts = TS(n)
|
||||
return nil
|
||||
}
|
||||
var s string
|
||||
if err := unmarshaller(&s); err == nil {
|
||||
t, err := time.Parse(time.UnixDate, s)
|
||||
*ts = TS(t.Unix())
|
||||
return err
|
||||
}
|
||||
return errors.New("illegal TS")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import (
|
|||
"encoding/json"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
)
|
||||
|
|
@ -14,7 +13,7 @@ func TestTSMarshalYaml(t *testing.T) {
|
|||
var ts TS
|
||||
if b, err := yaml.Marshal(TS(5)); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if s := string(b); strings.TrimSpace(s) != `5` {
|
||||
} else if s := string(b); !strings.HasSuffix(strings.TrimSpace(s), ` 1969`) {
|
||||
t.Fatal(s)
|
||||
} else if err := yaml.Unmarshal(b, &ts); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -37,7 +36,7 @@ func TestTSMarshalYaml(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestJSONTS(t *testing.T) {
|
||||
ts := TS(time.Now().Unix())
|
||||
ts := TS(1234567890)
|
||||
js, err := json.Marshal(ts)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -48,7 +47,7 @@ func TestJSONTS(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
if ts != ts2 {
|
||||
t.Fatal(ts2)
|
||||
t.Fatalf("want: %v, got: %v", ts, ts2)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal([]byte(`123`), &ts2); err != nil {
|
||||
|
|
|
|||
Loading…
Reference in New Issue