| Index: service/datastore/properties.go
|
| diff --git a/service/datastore/properties.go b/service/datastore/properties.go
|
| index 8ce5970def31e1939b3f69638c85bfca264e00de..44a4361ed895051e1516fb364d810027acfb0952 100644
|
| --- a/service/datastore/properties.go
|
| +++ b/service/datastore/properties.go
|
| @@ -17,6 +17,8 @@ import (
|
| var (
|
| minTime = time.Unix(int64(math.MinInt64)/1e6, (int64(math.MinInt64)%1e6)*1e3)
|
| maxTime = time.Unix(int64(math.MaxInt64)/1e6, (int64(math.MaxInt64)%1e6)*1e3)
|
| +
|
| + utcTestTime = time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
|
| )
|
|
|
| // IndexSetting indicates whether or not a Property should be indexed by the
|
| @@ -206,8 +208,8 @@ func PropertyTypeOf(v interface{}, checkValid bool) (PropertyType, error) {
|
| if checkValid && (x.Before(minTime) || x.After(maxTime)) {
|
| err = errors.New("time value out of range")
|
| }
|
| - if checkValid && x.Location() != time.UTC {
|
| - err = fmt.Errorf("time value has wrong Location: %s", x.Location())
|
| + if checkValid && !timeLocationIsUTC(x.Location()) {
|
| + err = fmt.Errorf("time value has wrong Location: %v %v", x.Location())
|
| }
|
| return PTTime, err
|
| case GeoPoint:
|
| @@ -221,6 +223,16 @@ func PropertyTypeOf(v interface{}, checkValid bool) (PropertyType, error) {
|
| }
|
| }
|
|
|
| +// timeLocationsEqual tests if two time.Location are equal.
|
| +//
|
| +// This is tricky using the standard time API, as time is implicitly normalized
|
| +// to UTC and all equality checks are performed relative to that normalized
|
| +// time. To compensate, we instantiate two new time.Time using the respective
|
| +// Locations.
|
| +func timeLocationIsUTC(l *time.Location) bool {
|
| + return time.Date(1970, 1, 1, 0, 0, 0, 0, l).Equal(utcTestTime)
|
| +}
|
| +
|
| // UpconvertUnderlyingType takes an object o, and attempts to convert it to
|
| // its native datastore-compatible type. e.g. int16 will convert to int64, and
|
| // `type Foo string` will convert to `string`.
|
|
|