gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:03 26 4
gpt4 key购买 nike

我的开始日期为: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com