diff --git a/pgtype/date.go b/pgtype/date.go index 658dbf1c..3c81a32b 100644 --- a/pgtype/date.go +++ b/pgtype/date.go @@ -3,7 +3,7 @@ package pgtype import ( "database/sql/driver" "encoding/binary" - "encoding/json" + "fmt" "time" "github.com/jackc/pgx/pgio" @@ -212,11 +212,8 @@ func (src *Date) Value() (driver.Value, error) { func (src *Date) MarshalJSON() ([]byte, error) { switch src.Status { case Present: - res, err := src.Time.MarshalJSON() - if err != nil { - return nil, err - } - return res, nil + s := fmt.Sprintf("%q", src.Time.Format("2006-01-02")) + return []byte(s), nil case Null: return []byte("null"), nil case Undefined: @@ -227,8 +224,8 @@ func (src *Date) MarshalJSON() ([]byte, error) { } func (dst *Date) UnmarshalJSON(b []byte) error { - var n time.Time - if err := json.Unmarshal(b, &n); err != nil { + n, err := time.Parse("\"2006-01-02\"", string(b)) + if err != nil { return err } diff --git a/pgtype/date_test.go b/pgtype/date_test.go index 178a1ff9..8128d87d 100644 --- a/pgtype/date_test.go +++ b/pgtype/date_test.go @@ -125,21 +125,19 @@ func TestMarshalJSON(t *testing.T) { return } - if string(enc) != "\"1900-01-01T00:00:00Z\"" { + if string(enc) != "\"1900-01-01\"" { t.Errorf("Incorrect json marshal") } } func TestUnmarshalJSON(t *testing.T) { var r pgtype.Date - tm := time.Date(1900, 1, 1, 0, 0, 0, 0, time.UTC) - - if err := r.UnmarshalJSON([]byte(`"` + tm.Format(time.RFC3339) + `"`)); err != nil { + if err := r.UnmarshalJSON([]byte("\"1900-01-01\"")); err != nil { t.Errorf("%v", err) return } - if tm != r.Time { + if r.Time.Year() != 1900 || r.Time.Month() != 1 || r.Time.Day() != 1 { t.Errorf("Incorrect json unmarshal") } }