我的开始日期为:2014-09-20,结束日期为2014-09-23
我有一张 map ,其中包含类似的值
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 是包含 start_date(joda DateTime)、end_date(joda DateTime) 和 revision(Integer) 的 bean 类
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
最佳答案
而不是
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
之前的修订版仍然“有效”。
但是,如果当前修订版从实际开始日期开始(相等),则意味着之前的版本在该日期未生效。目前的修订已于开始日期生效。由于此时您正在决定是否添加先前修订版,因此您拒绝了它。而当前的修订,很好,将在下一轮处理。
关于java - 根据修订日期映射映射开始日期和结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26895725/