最终的效果:
星期日 星期一 星期二 星期三 星期四 星期五 星期六
1 2
3 4 5 6 7* 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
public class Test {
public static void main(String[] arg) {
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();
int indent = 0;
while (weekday != firstDayOfWeek) {
indent++;
d.add(Calendar.DAY_OF_MONTH, -1);
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);
System.out.println();
for (int i = 0; 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.printf("*");
} else {
System.out.printf(" ");
}
d.add(Calendar.DAY_OF_MONTH, 1);
weekday = d.get(Calendar.DAY_OF_WEEK);
if (weekday == firstDayOfWeek) {
System.out.println();
}
} while (month == d.get(Calendar.MONTH));
if (weekday != firstDayOfWeek) {
System.out.println();
}
}
}