我正在尝试创建一个方法来计算数组中每个完整月份的数量。我的数组包含MM / dd / yyyy格式的日期。该数组可以包含从任何日期开始到任何日期结束的日期。日期按从最旧到最新的顺序排列,仅包含工作日。
例如,如果数组的日期为2010年6月15日至2012年1月15日,则会返回以下数组: jan = 1,feb = 1,mar = 1,apr = 1,may = 1,jun = 1,jul = 2,aug = 2,sep = 2,oct = 2,nov = 2,dec = 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++;
}
}
答案 0 :(得分:1)
做坏死的方式:
GregorianCalendar.getActualMaximum(DAY_OF_MONTH)
)GregorianCalendar.add(MONTH, 1)
)添加一个月,并检查是否after()
结束日期。如果没有,请增加该月份的计数器。GregorianCalendar.getActualMaximum(DAY_OF_MONTH)
,则每个开始和结束都添加1。 如果开始日是星期一,并且您想要包括前一个周末,则可以对其进行检查(类似于结束日期为星期五)。
更聪明的方法:
获取日期之间的年份差异。每个月增加差异-2,如果它确实更大。然后检查开始月份是在结束月份之前还是之后,并相应地增加它们之间的月份。检查开始和结束月份本身是否包括在内。