当我根据日期字段查询时,我得到所有属性都正确但日期字段始终是当前日期。为什么会这样?我正在使用带有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。
答案 0 :(得分:2)
java util date toString表示有问题,它在打印时显示本地时区的值。
因此,对于Java 8,您可以将它们从实用日期切换到本地日期时间。
LocalDateTime datetime = LocalDateTime.ofInstant(ts.toInstant(), ZoneId.of("America/New_York"))