MongoDb BSON以UTC时间存储日期

voi*_*oid 5 java date mongodb mongo-java-driver

如果我尝试在Document(BSON)中放置一个日期字段并将其写入Mongo,BSON会将其写入UTC.例如,约会

DateTime dateTime = new DateTime("2015-07-01");
Document doc = new Document("date", dateTime.toDate());
Run Code Online (Sandbox Code Playgroud)

将被存储为

"date" : ISODate("2015-06-30T18:30:00Z")
Run Code Online (Sandbox Code Playgroud)

在蒙戈.而且,如果我使用相同的Java驱动程序检索它,我会得到它

Wed Jul 01 00:00:00 IST 2015
Run Code Online (Sandbox Code Playgroud)

大.这个没有解决方案吗?我的意思是,为什么我不能按照自己的意愿存储日期?如果我需要从另一个时区查询数据库怎么办?我会得到不同的结果?日期字段是Mongo的重要组成部分,其中包含丰富的运算符.不过,为什么Mongo不提供这种灵活性?谢谢

Sim*_*mY4 5

IMO,mongo做的一切都是正确的.您使用本地时区实例化日期,然后将其存储在UTC中的mongo中.然后当你要求mongo为你检索它时,它会再次将日期转移到你当地的时区.

如果您不想处理时区转换,只需使用以下标志将本地时区设置为UTC:

-Duser.timezone="UTC"
Run Code Online (Sandbox Code Playgroud)


voi*_*oid 0

我通过在代码本身中将时区设置为 UTC 解决了问题。

    DateTimeZone zone = DateTimeZone.UTC;
    DateTimeZone.setDefault(zone);
Run Code Online (Sandbox Code Playgroud)