Core Java 应用GregorianCalendar类来显示日历
import java.text.DateFormatSymbols;
import java.util.*;
public class CalendarTest {
public static void main(String[] args)
{
Locale.setDefault(Locale.US);//设置为美国地区
GregorianCalendar d=new GregorianCalendar();
int today=d.get(Calendar.DAY_OF_MONTH);//用get方法获得当时的日和月
int month=d.get(Calendar.MONTH);
d.set(Calendar.DAY_OF_MONTH, 1);//将d设置为这个月的第一天
int weekday=d.get(Calendar.DAY_OF_WEEK);//得到一天为星期几,返回值为SUNDAY、MONDAY...SATURDAY中的一个
int firstDayOfWeek=d.getFirstDayOfWeek();//getFirstDayOfWeek方法获得星期的起始日
int indent=0;
//一周的第一天是否是月的第一天,如果不是,则追溯到上个月找到这个周的第一天所在的时间。
while(weekday != firstDayOfWeek)
{
indent++;
d.add(Calendar.DAY_OF_MONTH, -1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
/*
* DateFormatSymbols 是用于压缩本地化的日期_时间格式化数据,如月份名称、星期名称和时区数据的公有类。
*
* public String[] getShortWeekdays()
* 获得短型工作日字符串。 例如:"Sun", "Mon" 等。
* 返回值:短型工作日字符串。
*/
// print weekday names
String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
/*
* 以下循环操作类似于这个,但是前面一系列操作用于确定第一天是从周几开始(因地区而异)。
* 所以不用我下面这两行程序
* for(int i=1; i<=7; i++)
* System.out.printf("%s", weekdayNames[i]);
*
* 此时:weekday == firstDayOfWeek
* 但循环为先执行后判断,即从周的选定的第一天开始循环7次
*/
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(" ");//月的1号一般不是从周的第一天开始。比如:周的第一天是周日,而2011年的第一天是周六,空出前6天的位置。
}
d.set(Calendar.DAY_OF_MONTH, 1);
do
{
// print day
int day=d.get(Calendar.DAY_OF_MONTH);
System.out.printf("%3d", 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();
}
}
本来显示的是中文的星期几,结果和底下的数字不对应,强迫症只好改掉了。