//看了半天,发现java真麻烦,在这里做一个注释~,算法思路很简单,只是其中日历的某些用法,还不太习惯,呵呵~
import java.text.DateFormatSymbols;
import java.util.*;
/**
* @version 1.4 2007-04-07
* @author Cay Horstmann
*/
public class CalendarTest
{
public static void main(String[] args)
{
// construct d as current date
GregorianCalendar d = new GregorianCalendar();
//当前日期日和月
int today = d.get(Calendar.DAY_OF_MONTH);
int month = d.get(Calendar.MONTH);
//首先把d设置到本月的第一天
// 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 required 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("%6d", 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();
}
}