【发布时间】:2014-09-05 05:52:14
【问题描述】:
我在 Dropwizard 中有一个 REST 服务,它将数据从客户端存储到 MongoDB 并查询 MongoDB 以在 Dashboard 上进行实时分析。
从客户端我得到键值对的 JSON,其中我有一个日期字符串如下:
2014-07-14T05:58:20
时区如下:
"Asia/Kolkata"
我必须在 UTC 中将所有文档保存在 mongodb 中。
我想根据时区将日期转换为 UTC 并存储。
我正在使用 JodaDate 这样做
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);
但是当我尝试在 mongoDB 中保存 DateTime 时,会出现以下错误
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)
到目前为止,我在 NumberLong() 中以毫秒 DateTime.getMillis() 为单位存储日期,但对于某些查询,如 LineChart 的日、月聚合等,它很难处理 longNumber。
请建议任何替代方法,以便所有日期都按照其时区以 UTC 存储。 我想避免 REST 服务本地时区对日期进行任何转换。
【问题讨论】:
标签: java mongodb date datetime aggregation-framework