java - 获取每个月的计数

标签 java arrays

我正在尝试创建一种方法来计算数组中每个完整月份的数量。我的数组包含 MM/dd/yyyy 格式的日期。该数组可以包含从任何日期开始到任何日期结束的日期。日期按从最早到最新的顺序排列,并且仅包含工作日。

例如,如果数组的日期从 6/15/2010 到 1/15/2012,它将返回一个数组: 1 月 = 1、2 月 = 1、3 月 = 1、4 月 = 1、5 月 = 1、6 月 = 1、7 月 = 2、8 月 = 2、9 月 = 2、8 月 = 2、11 月 = 2、12 月 = 2

我希望有人能给我一些提示,这是我到目前为止所得到的:

double[] months = new double[12];

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat yyyy = new SimpleDateFormat("yyyy");

for(int ii = 0 ; ii < array.length-length ; ii++){

        date = (Date)formatter.parse(array[ii][0]);
        String currentDateMY = sdf.format(date);
        String currentDateYYYY = yyyy.format(date);

        date = (Date)formatter.parse(array[ii+1][0]);
        String nextDateMY = sdf.format(date);

            if (!currentDateMY.equals(nextDateMY)){

                date = (Date)formatter.parse(array[ii][0]);
                sdf = new SimpleDateFormat("MM");
                String currentDateM = sdf.format(date);

                if (currentDateM.equals("01")) months[0] = jan++;
                if (currentDateM.equals("02")) months[1] = feb++;
                if (currentDateM.equals("03")) months[2] = mar++;
                if (currentDateM.equals("04")) months[3] = apr++;
                if (currentDateM.equals("05")) months[4] = may++;
                if (currentDateM.equals("06")) months[5] = jun++;
                if (currentDateM.equals("07")) months[6] = jul++;
                if (currentDateM.equals("08")) months[7] = aug++;
                if (currentDateM.equals("09")) months[8] = sep++;
                if (currentDateM.equals("10")) months[9] = oct++;
                if (currentDateM.equals("11")) months[10] = nov++;
                if (currentDateM.equals("12")) months[11] = dec++;
            }
}

最佳答案

脑死亡的做法:

  1. 创建一个包含开始日期和结束日期的 GregorianCalendar。 (输入 1 表示开始 day_of_month,输入 GregorianCalendar.getActualMaximum(DAY_OF_MONTH) 表示开始 day_of_month 结束日期)
  2. 继续在开始日期中添加一个月 (GregorianCalendar.add(MONTH, 1)),并检查是否是 after() 结束日期。如果没有,则增加该月的计数器。
  3. 如果实际开始日期的 day_of_month 部分为 1,并且实际结束日期的 day_of_month 等于 GregorianCalendar.getActualMaximum(DAY_OF_MONTH),则为开始和结束各加 1。

如果开始日是星期一,并且您想包括之前的周末,则可以为此进行检查(对于结束日期是星期五也是如此)。

更明智的做法:

获取日期之间的年差。如果确实更大,则每月增加差值 2。然后检查起始月份是在结束月份之前还是之后,并相应地增加之间的月份。检查开始和结束月份本身是否包含在上面。

关于java - 获取每个月的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024172/

相关文章:

java - 插入和选择阿拉伯语数据 Android SQLite

java - 加载JAVA设置后更新GUI组件

java - Spring Boot 应用程序不会为 JPA @Table 注释创建模式

c++ - 用整数填充自定义整数数组

java - 将 UUID 转换回字符串输入 - nameUUIDFromBytes

java - 汤姆猫错误?或者是其他东西?

javascript - 如何分解长文本文件的内容以适应谷歌应用程序脚本中的多个变量?

java 。对象实例发生奇怪的变化

c# - 使用 CryptoStream (DESCryptoServiceProvider) 解密时如何返回 byte[]

javascript - 比较两个数组时找到第一个匹配值javascript