import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarTest {
public static void main(String[] args){
GregorianCalendar d = new GregorianCalendar();
int today = d.get(Calendar.DAY_OF_MONTH);
int month = d.get(Calendar.MONTH);
d.set(Calendar.DAY_OF_MONTH, 1);
int weekday = d.get(Calendar.DAY_OF_WEEK);
int firstDayOfWeek = d.getFirstDayOfWeek();//获取当前地区星期的起始日,比如中国的星期一是起始日
System.out.println("第一天" + firstDayOfWeek);
int indent =0;
while(weekday != firstDayOfWeek){
indent++;
d.add(Calendar.DAY_OF_MONTH, -1);
System.out.println("Day" + d.get(Calendar.DAY_OF_MONTH));
weekday = d.get(Calendar.DAY_OF_WEEK);
}
String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();
do{
System.out.printf("%4s", weekdayNames[weekday]);
d.add(Calendar.DAY_OF_MONTH, 1);
weekday = d.get(Calendar.DAY_OF_WEEK);
}while(weekday != firstDayOfWeek);
// for(int i = 0; i<weekdayNames.length; i++){
// System.out.printf("%4s",weekdayNames[i]);
// }
System.out.println();
for(int i = 1; i <= indent; i++){
System.out.print(" ");
}
d.set(Calendar.DAY_OF_MONTH, 1);
do{
int day = d.get(Calendar.DAY_OF_MONTH);
System.out.printf("%3d", day);
if(day == today){
System.out.print("*");
}else
System.out.print(" ");
d.add(Calendar.DAY_OF_MONTH, 1);
weekday = d.get(Calendar.DAY_OF_WEEK);
if(weekday == firstDayOfWeek) System.out.println();
}while(d.get(Calendar.MONTH) == month);
}
}
红色区域的功能是显示
星期日 星期一 星期二 星期三 星期四 星期五 星期六
这一行,为什么不能用加注释的那个for循环来替代呢?这中间有什么奥妙呢?
希望高手指教
------解决方案--------------------
上面循环的那个GregorianCalendar 的add方法调用
------解决方案--------------------
这个只是说你上面两个循环的区别
------解决方案--------------------
至于你说的后面用set设置回来了
但是你上面有减的操作
d.add(Calendar.DAY_OF_MONTH, -1);
你上面设置为第一天然后减了 就退回到前一个月去了
然后又没有add回来
所以下面的
while(d.get(Calendar.MONTH) == month);
这个是false就不会循环了