按日期查询的MongoDB总是提供当前日期

时间:2016-11-29 21:24:34

标签: mongodb java-8

当我根据日期字段查询时,我得到所有属性都正确但日期字段始终是当前日期。为什么会这样?我正在使用带有MongoRepository实现的java 8 spring。在集合中它是Date字段,在java对象中也是Date。

我将其更改为LocalDateTime但仍然提供当前日期。将其更改为ZonedDateTime不起作用,因为java不会自动将DB日期对象转换为ZonedDateTime。

如何使用日期查询mongoDB,这将返回数据库中的实际日期值,而不是当前日期。

Java DB对象:

@Document(collection = "XXX")
public class XXX{
@Field(value= "ts")
private Date timestamp;

MongoDB文档:

{ 
"_id" : ObjectId("--------"), 
"ts" : ISODate("2016-11-29T21:22:00.000+0000") 
}

存储库:

@Query(value = "{'regId': ?0, 'ts': {'$lte': ?1}}")
Page<T> findAllByRegId(ObjectId regId, Date timeStamp, Pageable pageable);

结果我得到:

id= same Id as above
ts = 2016-11-29T16:22:00.000Z

ts总是以当前时间戳返回,但在DB中它的值为2016-11-29T21:22。

1 个答案:

答案 0 :(得分:2)

java util date toString表示有问题,它在打印时显示本地时区的值。

因此,对于Java 8,您可以将它们从实用日期切换到本地日期时间。

LocalDateTime datetime = LocalDateTime.ofInstant(ts.toInstant(), ZoneId.of("America/New_York"))