【发布时间】:2019-12-19 01:36:19
【问题描述】:
我从具有事件日期/时间的提供商处获得了不同位置的一些事件的列表(事件位于不同的时区,因此日期/时间始终是本地的)。我需要在获得它们时将其保存到 mongodb,但看起来 Mongo 正在使用我的本地时区对其进行转换,因此我将 18:00 保存在数据库中,而不是从 20:00 开始的事件。
我正在使用 java spring boot 应用程序,当我尝试过滤结果时,如果我选择 19:00 之后的事件,我的事件不在列表中,但它应该在那里。我想存储这些日期而不计算时区。有没有办法配置mongo不做计算?我正在使用 mongodb 驱动程序版本 3.9.0。
更新(时间字段定义):
@Temporal(TemporalType.TIMESTAMP)
@Field("time")
private LocalDateTime time;
更新 2: 我玩过 shell,当我插入类似的东西时:
var mydate2 = ISODate();
db.test.insertOne( { iso: mydate2 } );
结果是:
{ "_id" : ObjectId("5d5173dc6240209d9377677a"), "iso" : ISODate("2019-08-12T14:12:42.762Z") }
但是当我改为插入日期时:
var mydate2 = Date();
db.test.insertOne( { iso: mydate2 } );
结果是:
{ "_id" : ObjectId("5d51741b6240209d9377677b"), "iso" : "Mon Aug 12 2019 16:13:42 GMT+0200 (Central Europe Standard Time)" }
,所以是正确的。 我可以从 Spring 文档定义中以某种方式说我想使用 Date 吗?我应该使用 ZonedDateTime 而不是 LocalDateTime?
【问题讨论】:
-
到目前为止你尝试过什么?你在用
ISODate吗? -
是的,ISODate。也使用 mongobee。在保存之前将 LocalDateTime 转换为 Date 时,mongo 似乎正在这样做。也许我不应该在 mongo 文档定义中使用 LocalDateTime?
-
你应该使用 UTC/GMT/Zulu,而不是本地。
-
在哪里,怎么做?对于文档定义中的字段?我将在文档中使用我当前的时间字段定义更新问题...
标签: java mongodb spring-boot date timezone