1

I have a REST service in Dropwizard which stores data from client to MongoDB and queries MongoDB for realtime analysis on Dashboard.

From client side i get JSON of Key-Value pair, in which i have a date string as follow :

2014-07-14T05:58:20

and timezone as follow :

"Asia/Kolkata"

I have to keep all document in mongodb in UTC.

I want to convert the dates to UTC according to their timezone and store.

I am using JodaDate to do so

DateTimeFormatter formatterInstance = DateTimeFormat
                        .forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'").withZone(
                                DateTimeZone.forID(timeZone));
                dateInstance = formatterInstance.parseDateTime(timeString);
DateTime dtTz = dateInstance.withZone(DateTimeZone.UTC);

but when i try to save DateTime in mongoDB it gives following error

Exception in thread "main" java.lang.IllegalArgumentException: can't serialize class org.joda.time.DateTime
at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:270)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:174)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:120)
at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:27)
at com.mongodb.OutMessage.putObject(OutMessage.java:289)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:261)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
at com.mongodb.DBCollection.insert(DBCollection.java:75)
at com.mongodb.DBCollection.insert(DBCollection.java:59)
at com.mongodb.DBCollection.insert(DBCollection.java:104)
at com.datedemo.main.TimeZoneManager.getUTCTime(TimeZoneManager.java:65)
at com.datedemo.main.DateExample.main(DateExample.java:22)

Uptill now i was storing dates in Milliseconds DateTime.getMillis() in NumberLong() but for some queries like aggregation on day, month for LineChart display its difficult to deal with longNumber.

Please suggest any alternate ways so that all the Dates are stored in UTC as per their Timezone. i want to avoid any conversion of Date by the REST service local timezone.

Ninad
  • 474
  • 8
  • 26

1 Answers1

0

You should look at these 3 posts which would answer your question.

How to deal with the timezone issue when storing dates in utc using mongod?

Bug filed in mongodb JIRA to address aggregation timezone concerns.

https://jira.mongodb.org/browse/SERVER-6310

Setting default time zone in JODA

MongoDB, Java: Retrieve date property as UTC

Community
  • 1
  • 1
Lalit Agarwal
  • 2,354
  • 1
  • 14
  • 18