time.go 690 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package jsontype
  2. import (
  3. "encoding/json"
  4. "time"
  5. "github.com/globalsign/mgo/bson"
  6. )
  7. type MilliTime struct {
  8. time.Time
  9. }
  10. func (mt MilliTime) MarshalJSON() ([]byte, error) {
  11. return json.Marshal(mt.Milli())
  12. }
  13. func (mt *MilliTime) UnmarshalJSON(data []byte) error {
  14. var milli int64
  15. if err := json.Unmarshal(data, &milli); err != nil {
  16. return err
  17. } else {
  18. mt.Time = time.Unix(0, milli*int64(time.Millisecond))
  19. return nil
  20. }
  21. }
  22. func (mt MilliTime) GetBSON() (interface{}, error) {
  23. return mt.Time, nil
  24. }
  25. func (mt *MilliTime) SetBSON(raw bson.Raw) error {
  26. return raw.Unmarshal(&mt.Time)
  27. }
  28. func (mt MilliTime) Milli() int64 {
  29. return mt.UnixNano() / int64(time.Millisecond)
  30. }