java - 创建一个日期列表,其值为 "change of condition"

标签 java date arraylist jodatime

我有一个来自查询的日期列表(一个月中的天数)和一个包含随机日期数的日期列表 (CoC)。 我正在开发一个java应用程序来扫描一个月中的天数,并在输出中写入该月中的所有天数以及其他列表发生变化时的相对日期。 我知道,我不清楚,但我写了一个简单的代码来让你清楚。

这是我的(错误的)代码:

import java.util.ArrayList;

import org.joda.time.MutableDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Test
{
    public static void main(String[] args)
    {
        int count_coc = 0;

        String[] month = {"2014-04-28", "2014-04-29", "2014-04-30", "2014-05-01",
                        "2014-05-02", "2014-05-03", "2014-05-04", "2014-05-05", "2014-05-06",
                        "2014-05-07", "2014-05-08", "2014-05-09", "2014-05-10", "2014-05-11",
                        "2014-05-12", "2014-05-13", "2014-05-14", "2014-05-15", "2014-05-16",
                        "2014-05-17", "2014-05-18", "2014-05-19", "2014-05-20", "2014-05-21",
                        "2014-05-22", "2014-05-23", "2014-05-24", "2014-05-25", "2014-05-26",
                        "2014-05-27", "2014-05-28", "2014-05-29", "2014-05-30", "2014-05-31", "2014-06-01"};

        String[] CoC = {"2014-04-30", "2014-05-15", "2014-05-24"};

        DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd");
        MutableDateTime dateElab = new MutableDateTime(dtf.parseDateTime(month[0]));
        MutableDateTime dateLast = new MutableDateTime(dtf.parseDateTime(month[month.length-1]));
        ArrayList<MutableDateTime> dtJs = new ArrayList<MutableDateTime>();

        for (int i = 0; i<CoC.length;i++)
        {
         dtJs.add(new MutableDateTime(dtf.parseDateTime(CoC[i])));
        }

        do
        {
         if (dtJs.size() > 1)
         {
             if ((count_coc) < (dtJs.size()-1))
             {
                 if (dateElab.isBefore(dtJs.get(count_coc+1)) || dateElab.isEqual(dtJs.get(count_coc+1)))
                 {
                     System.out.println("Date month: " + dtf.print(dateElab) + "      Date CoC: " + dtf.print(dtJs.get(count_coc)));

                     if ((count_coc) > dtJs.size())
                     {
                             System.out.println("Date month: " + dtf.print(dateElab) + "      Date CoC: " + dtf.print(dtJs.get(count_coc)));
                     }
                     else
                     {
                             count_coc++;
                     }

                 }
             }
             else
             {
                 System.out.println("Date month: " + dtf.print(dateElab) + "      Date CoC: " + dtf.print(dtJs.get(count_coc)));
             }

         }
         else
         {
                 System.out.println("Date month: " + dtf.print(dateElab) + "      Date CoC: " + dtf.print(dtJs.get(count_coc)));
         }

         dateElab.addDays(1);
        }
        while(dateElab.isBefore(dateLast) || dateElab.isEqual(dateLast));
    }
}

这是结果:

Date month: 2014-04-28      Date CoC: 2014-04-30
Date month: 2014-04-29      Date CoC: 2014-05-15
Date month: 2014-04-30      Date CoC: 2014-05-24
Date month: 2014-05-01      Date CoC: 2014-05-24
Date month: 2014-05-02      Date CoC: 2014-05-24
Date month: 2014-05-03      Date CoC: 2014-05-24
Date month: 2014-05-04      Date CoC: 2014-05-24
Date month: 2014-05-05      Date CoC: 2014-05-24
Date month: 2014-05-06      Date CoC: 2014-05-24
Date month: 2014-05-07      Date CoC: 2014-05-24
Date month: 2014-05-08      Date CoC: 2014-05-24
Date month: 2014-05-09      Date CoC: 2014-05-24
Date month: 2014-05-10      Date CoC: 2014-05-24
Date month: 2014-05-11      Date CoC: 2014-05-24
Date month: 2014-05-12      Date CoC: 2014-05-24
Date month: 2014-05-13      Date CoC: 2014-05-24
Date month: 2014-05-14      Date CoC: 2014-05-24
Date month: 2014-05-15      Date CoC: 2014-05-24
Date month: 2014-05-16      Date CoC: 2014-05-24
Date month: 2014-05-17      Date CoC: 2014-05-24
Date month: 2014-05-18      Date CoC: 2014-05-24
Date month: 2014-05-19      Date CoC: 2014-05-24
Date month: 2014-05-20      Date CoC: 2014-05-24
Date month: 2014-05-21      Date CoC: 2014-05-24
Date month: 2014-05-22      Date CoC: 2014-05-24
Date month: 2014-05-23      Date CoC: 2014-05-24
Date month: 2014-05-24      Date CoC: 2014-05-24
Date month: 2014-05-25      Date CoC: 2014-05-24
Date month: 2014-05-26      Date CoC: 2014-05-24
Date month: 2014-05-27      Date CoC: 2014-05-24
Date month: 2014-05-28      Date CoC: 2014-05-24
Date month: 2014-05-29      Date CoC: 2014-05-24
Date month: 2014-05-30      Date CoC: 2014-05-24
Date month: 2014-05-31      Date CoC: 2014-05-24
Date month: 2014-06-01      Date CoC: 2014-05-24

这是我的预期结果:

Date month: 2014-04-28      Date CoC: 2014-04-30
Date month: 2014-04-29      Date CoC: 2014-04-30
Date month: 2014-04-30      Date CoC: 2014-04-30
Date month: 2014-05-01      Date CoC: 2014-04-30
Date month: 2014-05-02      Date CoC: 2014-04-30
Date month: 2014-05-03      Date CoC: 2014-04-30
Date month: 2014-05-04      Date CoC: 2014-04-30
Date month: 2014-05-05      Date CoC: 2014-04-30
Date month: 2014-05-06      Date CoC: 2014-04-30
Date month: 2014-05-07      Date CoC: 2014-04-30
Date month: 2014-05-08      Date CoC: 2014-04-30
Date month: 2014-05-09      Date CoC: 2014-04-30
Date month: 2014-05-10      Date CoC: 2014-04-30
Date month: 2014-05-11      Date CoC: 2014-04-30
Date month: 2014-05-12      Date CoC: 2014-04-30
Date month: 2014-05-13      Date CoC: 2014-04-30
(change date CoC)
Date month: 2014-05-14      Date CoC: 2014-05-14
Date month: 2014-05-16      Date CoC: 2014-05-14
Date month: 2014-05-17      Date CoC: 2014-05-14
Date month: 2014-05-18      Date CoC: 2014-05-14
Date month: 2014-05-19      Date CoC: 2014-05-14
Date month: 2014-05-20      Date CoC: 2014-05-14
Date month: 2014-05-21      Date CoC: 2014-05-14
Date month: 2014-05-22      Date CoC: 2014-05-14
Date month: 2014-05-23      Date CoC: 2014-05-14
(change date CoC)
Date month: 2014-05-24      Date CoC: 2014-05-24
Date month: 2014-05-25      Date CoC: 2014-05-24
Date month: 2014-05-26      Date CoC: 2014-05-24
Date month: 2014-05-27      Date CoC: 2014-05-24
Date month: 2014-05-28      Date CoC: 2014-05-24
Date month: 2014-05-29      Date CoC: 2014-05-24
Date month: 2014-05-30      Date CoC: 2014-05-24
Date month: 2014-05-31      Date CoC: 2014-05-24

非常感谢!! :)

最佳答案

嵌套的 if 始终为 false,因此会应用 else;因此 count_coc++,这就是为什么在两次运行后打印 CoC 的最后一个元素: 你有:

if ((count_coc) < (dtJs.size()-1)) {
    //other code
    if ((count_coc) > dtJs.size()) //this will always be false

关于java - 创建一个日期列表,其值为 "change of condition",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23526722/

相关文章:

java - jTable 开头的复选框

javascript - 什么可以使 Date.parse 返回不同的值?

mysql - 从mysql中的当前日期获取最后5天的日期

java - 我的method.add(int)不会将用户输入添加到我的数组中

java - ArrayList 中元素的出现频率

java - 将 ArrayList 转换为字节数组

java - 从字符串Java中提取文本

java - Java 读取文件时出错

java - Spring中如何每次运行init和destroy方法

python - 使用出生日期从 Django 模型中过滤人员