题目
题目另可表述为:
1.输入一个年份和月份,按格式输出此月份的日历
2.以如下格式输出一个月份的日历
代码实现
1.Calendar类的一些说明
Calendar类是一个抽象类,不能通过new的方式来获得实例,可以使用类方法getInstance()返回一个Calendar的子类对象.
Calendar calendar = Calendar.getInstance();
Calendar类的操作需要首先设定日期:
calendar.set(year, month - 1, day);
由于Java中月份从0月开始计数,所以真实月份12月(month=12) 需要减1 才是Java中的12月
在输出日历时,只需要关注本月第一天是星期几即可,例如图中
2015年8月1日对应星期六.
这里使用方法
int startDay=calendar.get(Calendar.DAY_OF_WEEK);
得到startDay=7.说明2015年8月1日是本周的第7天.
Java中规定了每周第一天是星期日,所以星期日=1,星期一=2…星期六=7
2.天数的判断
月份有大小月之分,其中大月31天,小月30天,特殊的2月有28天.闰年2月有29天.
public static int maxDayInMonth(int year, int month) {
int max = 30;
if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
else if (month == 2) max = 28;
else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
return max;
}
3.空格补全
如果第一天是星期六, 需要将第一周的前6天用空格补全,代表前6天来自于9月份的25-30日.
public static void fillSpace(int startDay) {
for (int i = 1; i < startDay; i++) {
System.out.printf("%4s", " ");
}
}
4.日历的输出
public static void printCalender() {
int year = 2015;
int month = 8;
//input
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本周第一天是星期几
int count = startDay - 1; //第一周的初始计数
int maxDay = maxDayInMonth(year, month);
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
fillSpace(startDay);
for (int i = 1; i <= maxDay; i++) {
System.out.printf("%3d%s", i, " "); //使用printf函数进行格式对齐
count++;
if (count >= 7) { //每输出7天换一次行
count = 0;
System.out.print('\n');
}
}
}
完整代码
import java.util.Calendar;
public class LittleCode_3 {
public static void printCalender() {
int year = 2015;
int month = 8;
//input
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本周第一天是星期几
int count = startDay - 1; //第一周的初始计数
int maxDay = maxDayInMonth(year, month);
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
fillSpace(startDay);
for (int i = 1; i <= maxDay; i++) {
System.out.printf("%3d%s", i, " "); //使用printf函数进行格式对齐
count++;
if (count >= 7) { //每输出7天换一次行
count = 0;
System.out.print('\n');
}
}
}
public static void fillSpace(int startDay) {
for (int i = 1; i < startDay; i++) {
System.out.printf("%4s", " ");
}
}
public static int maxDayInMonth(int year, int month) {
int max = 30;
if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
else if (month == 2) max = 28;
else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
return max;
}
public static void main(String[] args) {
printCalender();
}
}
输出结果
输入year=2015 month=8