java中关于输出当前日历的问题
在Java核心中看到的一个关于输出当前日历的问题
?
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
?* 输出当前日历
?* @author srong
?* @version 1.0 2011-09-07
?*/
public class CalendarTest {
?public static void main(String[] args) {
??// construct as current date
??GregorianCalendar d = new GregorianCalendar();
??int today = d.get(Calendar.DAY_OF_MONTH);
??int month = d.get(Calendar.MONTH);
??// set d to start date of the month
??d.set(Calendar.DAY_OF_MONTH, 1);
??int weekday = d.get(Calendar.DAY_OF_WEEK);
??// get first day of week (Sunday in the U.S)
??int firstDayOfWeek = d.getFirstDayOfWeek();
??// determine the require indentation for the first line
??int indent = 0;
??while (weekday != firstDayOfWeek) {
???indent++;
???d.add(Calendar.DAY_OF_MONTH, -1);
???weekday = d.get(Calendar.DAY_OF_WEEK);
??}
??// print weekday names
??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 = 1; i <= indent; i++)
???System.out.print("????? ");
??d.set(Calendar.DAY_OF_MONTH, 1);
??do {
???// print day
???int day = d.get(Calendar.DAY_OF_MONTH);
???System.out.printf("%5d", day);
???// mark current day with *
???if (day == today)
????System.out.print("*");
???else
????System.out.print(" ");
???// advance d to the next day
???d.add(Calendar.DAY_OF_MONTH, 1);
???weekday = d.get(Calendar.DAY_OF_WEEK);
???// start a new line at the start of the week
???if (weekday == firstDayOfWeek)
????System.out.println();
??} while (d.get(Calendar.MONTH) == month);
??// the loop exits when d is day 1 of the next month
??// print final end of line if necessary
??if (weekday != firstDayOfWeek)
???System.out.println();
?}
}