根据修订日期映射映射开始日期和结束日期

时间:2014-11-12 20:12:48

标签: java time jodatime

我有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

1 个答案:

答案 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上一版本仍然“有效”

但是,如果当前版本从实际开始日期开始(相等),则表示该日期的先前版本有效。目前的修订版已在开始日期生效。由于您目前正在决定是否添加之前的版本,因此您拒绝该修订。目前的修订很好,将在下一轮处理。