我需要在提供的日期范围内获取日期为“星期一”的日期列表,包括在内。
例如:
如果我们将区间 05/01/2017 传递到 05/15/2017,函数应该返回:
2017 年 5 月 1 日
2017 年 5 月 8 日
2017 年 5 月 15 日
我的代码如下:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
List<String> dates = new ArrayList<String>();
Calendar cini = Calendar.getInstance();
cini.setTime(formatter.parse(peticion.getDiaInicio()));
Calendar cfin = Calendar.getInstance();
cfin.setTime(formatter.parse(peticion.getDiaFin()));
while (cfin.after(cini)) {
if (cini.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
logger.info("---------->" + cini.getTime().toString() + " es Lunes ");
dates.add(formatter.format(cini.getTime()));
}
cini.add(Calendar.DATE, 1);
}
for(String c : dates){
System.out.println("Fecha: " + c);
}
使用此代码,它仅返回前两个值:
2017 年 5 月 1 日
2017 年 5 月 8 日
有什么建议吗?
问题是
while
. 当它到达第三次迭代时cini=15/05/2017
,cini
和cfin
相等,所以cfin.after(cini)
。一个可能的解决方案是将条件更改为
在您的 while 条件下,如果 cfin 等于 cini,则必须再添加一个问题:
这样,您可以确保它比较最后给定的日期
看到没有人拿起手套...
这里更概括一点:https ://ideone.com/v2yTVj