MongoDb BSON 以 UTC 时间存储日期
MongoDb BSON stores Date in UTC time
如果我尝试将日期字段放入文档 (BSON) 并将其写入 Mongo,BSON 将以 UTC 格式写入。例如,日期
DateTime dateTime = new DateTime("2015-07-01");
Document doc = new Document("date", dateTime.toDate());
将存储为
"date" : ISODate("2015-06-30T18:30:00Z")
在 Mongo 中。而且,如果我使用相同的 Java 驱动程序检索它,我会得到它作为
Wed Jul 01 00:00:00 IST 2015
太棒了。没有解决办法吗?我的意思是,为什么我不能按照我的意愿存储我的日期?如果我需要从另一个时区查询数据库怎么办?我会得到不同的结果吗?日期字段是 Mongo 的重要组成部分,周围环绕着一组丰富的运算符。不过,为什么 Mongo 不提供这种灵活性?
谢谢
当使用 DateTime
(来自 org.joda.time
或 java.time
)时,会创建一个带时区的日期,不幸的是 MongoDB 不支持它。 (参见 BSON Types)
因此,在 UTC 中保存它是一个简单可靠的解决方案,不会丢失任何数据。
作为替代方案,您应该看看 LocalDateTime
。
它不包含 DateTimeZone
,因此无需先转换任何内容。
IMO,mongo 一切都做对了。您使用本地时区实例化日期,然后将其存储在 UTC 的 mongo 中。然后,当您要求 mongo 为您检索它时,它会再次将日期转移到您当地的时区。
如果您不想处理时区转换,只需使用以下标志将本地时区设置为 UTC:
-Duser.timezone="UTC"
我通过在代码本身中将我的时区设置为 UTC 来解决问题。
DateTimeZone zone = DateTimeZone.UTC;
DateTimeZone.setDefault(zone);
找到了一个非常简单的解决方案。在您的 MongoDB.
中让日期采用 UTC 格式
每当您将其提取到 UI 时,只需执行以下操作:
new Date(fetchedDate);
它将其转换为本地日期。
如果我尝试将日期字段放入文档 (BSON) 并将其写入 Mongo,BSON 将以 UTC 格式写入。例如,日期
DateTime dateTime = new DateTime("2015-07-01");
Document doc = new Document("date", dateTime.toDate());
将存储为
"date" : ISODate("2015-06-30T18:30:00Z")
在 Mongo 中。而且,如果我使用相同的 Java 驱动程序检索它,我会得到它作为
Wed Jul 01 00:00:00 IST 2015
太棒了。没有解决办法吗?我的意思是,为什么我不能按照我的意愿存储我的日期?如果我需要从另一个时区查询数据库怎么办?我会得到不同的结果吗?日期字段是 Mongo 的重要组成部分,周围环绕着一组丰富的运算符。不过,为什么 Mongo 不提供这种灵活性? 谢谢
当使用 DateTime
(来自 org.joda.time
或 java.time
)时,会创建一个带时区的日期,不幸的是 MongoDB 不支持它。 (参见 BSON Types)
因此,在 UTC 中保存它是一个简单可靠的解决方案,不会丢失任何数据。
作为替代方案,您应该看看 LocalDateTime
。
它不包含 DateTimeZone
,因此无需先转换任何内容。
IMO,mongo 一切都做对了。您使用本地时区实例化日期,然后将其存储在 UTC 的 mongo 中。然后,当您要求 mongo 为您检索它时,它会再次将日期转移到您当地的时区。
如果您不想处理时区转换,只需使用以下标志将本地时区设置为 UTC:
-Duser.timezone="UTC"
我通过在代码本身中将我的时区设置为 UTC 来解决问题。
DateTimeZone zone = DateTimeZone.UTC;
DateTimeZone.setDefault(zone);
找到了一个非常简单的解决方案。在您的 MongoDB.
中让日期采用 UTC 格式
每当您将其提取到 UI 时,只需执行以下操作:
new Date(fetchedDate);
它将其转换为本地日期。