【问题标题】:Inserting Date in MongoDB using Java使用 Java 在 MongoDB 中插入日期
【发布时间】: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


    【解决方案1】:

    你应该看看这 3 个帖子,它们会回答你的问题。

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

    在 mongodb JIRA 中提交了错误以解决聚合时区问题。

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

    在 JODA 中设置默认时区

    MongoDB, Java: Retrieve date property as UTC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2018-09-01
      • 2018-01-18
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多