/**  *  * 根据年、月获取当前月日历  *  */
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar;
public class CalendarTools {
public static void drawCalendar(Date date) {
Calendar cal = Calendar.getInstance();   cal.setTime(date);   int year = cal.get(Calendar.YEAR);   int month2 = cal.get(Calendar.MONTH) + 1; // Calendar里取出来的month比实际的月份少1,   // 所以要加上
// 期望的日历对象   GregorianCalendar d = new GregorianCalendar(year, month2, 0);
// 当前的日历对象   GregorianCalendar gc = new GregorianCalendar();
int today = gc.get(java.util.Calendar.DAY_OF_MONTH);// 得到当前的日期   int monthToday = gc.get(java.util.Calendar.MONTH) + 1;// 得到当前的月份   int month = d.get(java.util.Calendar.MONTH) + 1;// 得到期望日期的月份
// 给期望日期设置一个月的第一天   d.set(java.util.Calendar.DAY_OF_MONTH, 1);   // 获得期望月份的第一天是一周中的第几天   int weekday = d.get(java.util.Calendar.DAY_OF_WEEK);
// 打印日历头   System.out.println("Mon\tTue\tWed\tFou\tFri\tSat\tSun");
// 制作日历第一行的缩进   for (int i = java.util.Calendar.SUNDAY; i < weekday; i++) {    System.out.print("\t");   }   do {    // 打印日子    int day = d.get(java.util.Calendar.DAY_OF_MONTH);    System.out.printf("%3d", day);    // 用*号标记当天日期    if (day == today && month == monthToday) {     System.out.print("*\t");    } else {     System.out.print("\t");    }    // 每当周六另起一行    if (weekday == java.util.Calendar.SATURDAY) {     System.out.println();    }    // 增加一天得到第二天    d.add(java.util.Calendar.DAY_OF_MONTH, 1);
// 重新获得改天在一周中的位置    weekday = d.get(java.util.Calendar.DAY_OF_WEEK);   } while (d.get(java.util.Calendar.MONTH) + 1 == month);  }
public static void main(String[] args) {   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   Calendar c = Calendar.getInstance();   try {    c.setTime(sdf.parse("2012-7-1"));    drawCalendar(c.getTime());   } catch (ParseException e) {    e.printStackTrace();   }  } }