您的位置:首页 > 编程语言 > Java开发

显示当前月的日历(摘自java核心技术.卷I)

2013-08-19 10:23 363 查看
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);//返回当月月份

// 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("%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();

}

}

输出结果类似:

星期日 星期一 星期二 星期三 星期四 星期五 星期六

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: