我有start_date:2014-09-20和end_date为2014-09-23
我有一张包含
等值的地图key(revision) Value
109 2014-06-17
110 2014-09-23
我需要输出格式为
Start date End date revision
2014-09-20 2014-09-22 109
2014-09-23 2014-09-23 110
我有以下代码但如果提供的开始日期或结束日期相同则失败。 RevisionInfo是bean类,包含start_date(joda DateTime),end_date(joda DateTime)和revision(Integer)
public static void main(String[] args) {
DateTime startDate = new DateTime("2014-09-20");
DateTime endDate = new DateTime("2014-09-23");
Map<Integer, DateTime> revisions = new HashMap<Integer, DateTime>();
revisions.put(109, new DateTime("2014-06-17"));
revisions.put(110, new DateTime("2014-09-23"));
Map<Integer, DateTime> sortedRevisions = new TreeMap<Integer, DateTime>(revisions);
DateTime nextRevisionStartDate = startDate;
Integer previousRevision = null;
List<RevisionInfo> revisionInfos = new ArrayList<RevisionInfo>();
for (Integer revision : sortedRevisions.keySet()){
if(sortedRevisions.get(revision).isAfter(endDate) ){
break;
}
if(sortedRevisions.get(revision).isEqual(startDate) || sortedRevisions.get(revision).isAfter(startDate) ){
if(revisionInfos.size() == 0)
{
if(previousRevision != null) {
revisionInfos.add(new RevisionInfo(startDate, sortedRevisions.get(revision).minusDays(1), previousRevision));
nextRevisionStartDate = sortedRevisions.get(revision);
}
}
else
{
revisionInfos.add(new RevisionInfo(nextRevisionStartDate, sortedRevisions.get(revision).minusDays(1), previousRevision));
nextRevisionStartDate = sortedRevisions.get(revision);
}
}
previousRevision = revision;
}
revisionInfos.add(new RevisionInfo(nextRevisionStartDate, endDate, previousRevision));
for (RevisionInfo revisionInfo : revisionInfos){
System.out.println("Start Date :: "+ revisionInfo.getStartDate()+ ":: End date ::"+ revisionInfo.getEndDate()+": Revision:"+ revisionInfo.getRevision());
}
}
失败的案例
提供的输入日期是
Start_date End_date
2014-09-23 2014-09-23
生成的输出
Start_date End_date Revision
2014-09-23 2014-09-22 110
2014-09-23 2014-09-23 110
预期输出
Start_date End_date Revision
2014-09-23 2014-09-23 110
答案 0 :(得分:1)
而不是
if(sortedRevisions.get(revision).isEqual(startDate) || sortedRevisions.get(revision).isAfter(startDate) ){
你的病情应该只是:
if(sortedRevisions.get(revision).isAfter(startDate) ){
说明:
在每一轮中,您查看当前版本,并决定是否将上一版本添加到列表中。
如果当前修订版的日期大于开始日期,则表示上一版本在实际开始日期仍然“有效”。例如,如果开始日期为2014-10-05
,并且当前版本从2014-10-10
开始,则表示从2014-10-05
开始,直到2014-10-09
上一版本仍然“有效”
但是,如果当前版本从实际开始日期开始(相等),则表示该日期的先前版本不有效。目前的修订版已在开始日期生效。由于您目前正在决定是否添加之前的版本,因此您拒绝该修订。目前的修订很好,将在下一轮处理。