Mongodb java驱动程序在使用聚合进行读取时自动将日期转换为本地计算机时区

Mongodb java驱动程序在使用聚合进行读取时自动将日期转换为本地计算机时区,java,mongodb,Java,Mongodb,作为utc时区存储在数据库中的日期。但是当使用aggregate从数据库中检索到它时,它会自动转换为我的本地机器时区。这是因为Mongodb java驱动程序吗? 例如,我存储了: 文件--- {“_id”:“5d72010ef608c30a0b33be8f”,“销售日期”:“2019-09-06T06:47:42.184Z”} 当使用MongoDb compass读取时,它显示的销售日期与上面相同,但当使用MongoDb java驱动程序检索时: MongoCollection<Docu

作为utc时区存储在数据库中的日期。但是当使用aggregate从数据库中检索到它时,它会自动转换为我的本地机器时区。这是因为Mongodb java驱动程序吗? 例如,我存储了: 文件---

{“_id”:“5d72010ef608c30a0b33be8f”,“销售日期”:“2019-09-06T06:47:42.184Z”}

当使用MongoDb compass读取时,它显示的销售日期与上面相同,但当使用MongoDb java驱动程序检索时:

MongoCollection<Document> collectionDoc = database.getCollection(this.collectionName);
AggregateIterable<Document> output = collectionDoc.aggregate(agg);

for (Document document : output) {
    System.out.println("document: " + document);
}


我使用的是MongoDB java驱动程序版本3.11.0-beta4,java 8。
有什么想法吗?是驱动程序自动转换为本地机器时区还是使用操作系统时区转换为Java?

驱动程序返回数据库中的Java.util.Date对象。它对时间所代表的时区一无所知。它不在任何地方存储时区。Mongo Shell始终将时间值表示为UTC

也就是说,如果您希望像UTC一样在应用程序代码中使用它, 从代码本身中将我的时区设置为UTC,如下所示

DateTimeZone zone = DateTimeZone.UTC;
DateTimeZone.setDefault(zone);

如果您只想为joda time设置默认时区,请使用

您可以尝试以下方法吗,
java-jar yourApp.jar-Duser.timezone=“UTC”
。我不知道你是如何运行你的应用程序的,但是请尝试一下设置这个环境。我使用的是EclipseIDE,使用JSFWeb应用程序发布
DateTimeZone zone = DateTimeZone.UTC;
DateTimeZone.setDefault(zone);