我正在尝试编写一个简单的程序,该程序将从年初开始每隔一个星期一(每个付费日期)添加到一个列表中,发生的事情有点奇怪,但我从未使用过日历以前的类,我想我可能正在使用compareTo错误,但我读了javadoc,似乎没关系。 包javasampleapps;
import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Map;
/**
*
* @author DavidH
*/
public class AddingDaysToCalendar {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Calendar cal = new GregorianCalendar();
System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
cal.add(Calendar.WEEK_OF_YEAR, 1);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.WEEK_OF_YEAR, 1 + 1);
Calendar currentDate = new GregorianCalendar();
currentDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
int counter = 2;
List<Date> dates = new ArrayList<Date>();
while ((cal.getTime().compareTo((currentDate.getTime())) < 0)) {
cal.set(Calendar.WEEK_OF_YEAR, counter);
dates.add(cal.getTime());
counter += 2;
}
System.out.println("Listing Dates:");
for (Date d : dates) {
System.out.println(d);
}
}
}
正在输出:
39
40
Listing Dates:
Mon Jan 03 13:37:29 AST 2011
Mon Jan 17 13:37:29 AST 2011
Mon Jan 31 13:37:29 AST 2011
Mon Feb 14 13:37:29 AST 2011
Mon Feb 28 13:37:29 AST 2011
Mon Mar 14 13:37:29 ADT 2011
Mon Mar 28 13:37:29 ADT 2011
Mon Apr 11 13:37:29 ADT 2011
Mon Apr 25 13:37:29 ADT 2011
Mon May 09 13:37:29 ADT 2011
Mon May 23 13:37:29 ADT 2011
Mon Jun 06 13:37:29 ADT 2011
Mon Jun 20 13:37:29 ADT 2011
Mon Jul 04 13:37:29 ADT 2011
Mon Jul 18 13:37:29 ADT 2011
Mon Aug 01 13:37:29 ADT 2011
Mon Aug 15 13:37:29 ADT 2011
Mon Aug 29 13:37:29 ADT 2011
Mon Sep 12 13:37:29 ADT 2011
Mon Sep 26 13:37:29 ADT 2011
为什么要添加最后一个日期? 9月26日还没有发生。
答案 0 :(得分:4)
为什么要添加最后一个日期? 9月26日还没有发生。
因为您在之后提前了,所以检查它与当前时间的关系,并在之前将其添加到列表中:
while ((cal.getTime().compareTo((currentDate.getTime())) < 0)) {
cal.set(Calendar.WEEK_OF_YEAR, counter);
dates.add(cal.getTime());
counter += 2;
}
这应该解决这个问题(可能会引入其他人):
while ((cal.getTime().compareTo((currentDate.getTime())) < 0)) {
dates.add(cal.getTime());
counter += 2;
cal.set(Calendar.WEEK_OF_YEAR, counter);
}