【问题标题】:Spring MongoDB - Finding Documents between two datesSpring MongoDB - 在两个日期之间查找文档
【发布时间】:2017-07-10 14:50:08
【问题描述】:

我对 Java 有点陌生,正在尝试编写一个查询,该查询将返回两个日期之间存储在我的 mongodb 中的文档。我想我已经接近正确了,但很难做到。我收到以下格式的日期范围:

  • [2017-06-29, 2017-07-05]

我正在比较的日期存储在数据库中,如下所示:

  • yyyy-MM-dd'T'HH:mm:ss-SSSS

到目前为止我有什么..

public List<VehicleStatus> getReportingDateRange(List<String> dates)  {

    DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
    DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss-SSSS");  

    Date startDate = outputFormat.parse(dates.get(0));      
    Date endDate = outputFormat.parse(dates.get(1));

    Query query = new Query();

    Criteria c = new Criteria().andOperator(Criteria.where("updateTime").gte(outputFormat.format(startDate)),  
            Criteria.where("updateTime").lte(outputFormat.format(endDate)));

    query.addCriteria(c);

    return this.mongoOperations.find(query, VehicleStatus.class);

   }

我收到一个解析异常。我真的不知道从哪里开始,非常感谢任何帮助。如果您需要任何其他信息,请告诉我。

谢谢!

【问题讨论】:

  • 解析 Date startDate = inputFormat.parse(dates.get(0)); Date endDate = inputFormat .parse(dates.get(1)); 并且您的日期应该存储为日期类型。所以不需要解析输出格式和Criteria c = new Criteria().andOperator(Criteria.where("updateTime").gte(startDate), Criteria.where("updateTime").lte(endDate));
  • @Veeram 日期作为字符串存储在数据库中
  • 哦,好吧。尝试String startDate = outputFormat.format(inputFormat.parse(dates[0])); String endDate = outputFormat.format(inputFormat.parse(dates[0])); 并将其传递给标准
  • @Veeram - 成功了!非常感谢帮忙。简单的修复,但我显然忽略了一些东西。做一个答案,我会让它正确:)

标签: java spring mongodb


【解决方案1】:

您需要将日期解析为输入格式,然后将日期格式化为输出格式。

类似

String startDate = outputFormat.format(inputFormat.parse(dates[0])); 
String endDate = outputFormat.format(inputFormat.parse(dates[0]));

Criteria c = new Criteria().andOperator(Criteria.where("updateTime").gte(star‌​tDate), Criteria.where("updateTime").lte(endDate));

您应该尝试将日期保存为日期类型并使用以下版本。

Date startDate = inputFormat.parse(dates.get(0)); 
Date endDate = inputFormat .parse(dates.get(1));

Criteria c = new Criteria().andOperator(Criteria.where("updateTime").gte(star‌​tDate), Criteria.where("updateTime").lte(endDate));

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多