2017-07-10 16 views
0

私は多少Javaに慣れていないし、2つの日付の間に自分のmongodbに保存されたドキュメントを返すクエリを作成しようとしている。私はそれが正しいものに近づいていると思うが、そこに行くのは苦労している。私は、次の形式で日付範囲を受け付けております:Spring MongoDB - 2つの日付間でのドキュメントの検索

  • [2017年6月29日、2017年7月5日]

次のように私は比較しています日付がデータベースに格納されます。

  • 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); 

    } 

私は解析例外を受け取りました。私は本当にここからどこに行くかわからない、どんな助けも大歓迎です。追加情報が必要な場合は、私に知らせてください。

ありがとうございました!

+0

'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

+0

@Veeram日付はDBに文字列として格納されます – reedb89

+0

まあまあです。 try 'String startDate = outputFormat.format(inputFormat.parse(dates [0])); String endDate = outputFormat.format(inputFormat.parse(dates [0]));そしてこれを条件に渡します。 – Veeram

答えて

2

日付を入力形式に解析した後、日付形式を出力形式に書式設定する必要があります。あなたは、日付型として日付を保存し、バージョンの下に使用してみてください

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)); 
関連する問題