0

I have different values in Google datastore column TS. The column type is string. Here are bunch of values

1994-11-04T13:15:30Z    
1994-11-06T13:15:30Z    
1994-11-05T08:15:30-05:00   
1994-11-07T08:15:30-05:00

Now these values are in 2 different formats. The one with Z represent the timestamp in UTC timezone. However, the one with the offset is representing local timezone (am I correct here?)

Now the problem is that the query that we are making in our project does ordering based on this column i.e.,

query := datastore.NewQuery(myEntityType).
    Namespace(myNameSpace.String()).
    Order("-TS")
rows := make([]domain.datastore.rows, 0)
_, err := r.client.GetAll(ctx, query, rows)

There client is cloud.google.com/go/datastore object.

I am unable to test this in my local but in prod, the end user are seeing these things out of order. However, if I go to datastore UI, and sort values by clicking on TS column, they order just fine. Which is confusing me that if the error was on sorting, shouldn't the error be there on UI as well?

So I am not sure how to fix this bug. Should I convert Google Datastore column to Timestamp (can we do so?). Or should I fix the code to persist consistently?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
Em Ae
  • 8,167
  • 27
  • 95
  • 162
  • I ran into this headache recently. It's best to normalize your times into UTC. If your DB is reporting times in local-time, best to coerce them into UTC at the query stage e.g. https://stackoverflow.com/questions/56397882/timezone-reconciliation-with-sql – colm.anseo Jul 17 '19 at 17:46
  • 1
    Those are [RFC3339](https://tools.ietf.org/html/rfc3339) formatted times. – Jonathan Hall Jul 17 '19 at 18:32
  • Both of them? or just with the offset? – Em Ae Jul 17 '19 at 18:39

0 Answers0