import java.util.Calendar;
public class cal {
private int year;
private int month;
public cal(){}
public cal(int year ,int month){
this.year = year;
this.month = month;
}
public int WhatWeekDay(){
//创建Calendar对象
Calendar calendar = Calendar.getInstance();
//设置calendar对象的年
calendar.set(Calendar.YEAR,this.year);
//设置calendar对象的月份 ,因为此处的月份是从零开始(0-11表示1-12月),所以我们输入的数值要减去1才是正确的月份
//(比如输入8月,接收数值 8 ,但是因为Calendar的特殊月份计数, 8 代表的是"9月",所以减去 1 为 7 ,才是正确的 8月)
calendar.set(Calendar.MONTH,this.month-1);
//设置日期为打印月的第一天
calendar.set(Calendar.DATE, 1);
//用get方法获取这一天是周几
int whatDay = calendar.get(Calendar.DAY_OF_WEEK);
//Calendar从周日开始到周六结束,用1-7表示,这里为了方便,把其数值减 1 ,得到周日到周六为 0 - 6 只需特殊处理周日即可
return whatDay-1; //得出这个月的第一天是周几
}
public int WhatDayOfMonth(){
//实例化Calendar对象
Calendar calendar = Calendar.getInstance();
//设置为打印年打印月的下一个月(参考WhatWeekDay方法中的月份注释 ,这里没减1)第一天.
//例:输入 2018 2 其实为2018年的3月
calendar.set(this.year,this.month,1);
//使上面的日期退一天 得到打印月
calendar.add(Calendar.DATE,-1);
//获取日的数值
int monthDay =calendar.get(Calendar.DATE);
return monthDay;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMouth() {
return month;
}
public void setMouth(int mouth) {
this.month = mouth;
}
public static void main(String[] args) {
int year=Integer.parseInt(args[1]);
int month =Integer.parseInt(args[0]);
//创建日历工具类对象,并用带参构造初始化
cal dt = new cal(year,month);
//实例化打印工具类对象
PrintDayTool pd = new PrintDayTool();
String[] s=new String[] {
"January","February","March","April","May","June","July","August","September","October","November","December"
};//建立12个月份的string数组
System.out.println(s[month-1]+" "+year);//打印英文月份和数字年份
//调用打印工具类对象的printDay方法,传入年和月份
pd.printDay(dt.WhatDayOfMonth(),dt.WhatWeekDay());
}
}
public class PrintDayTool {
public void printDay(int daysOfMouth,int whatDay){
int count = 0; //定制计数标记
System.out.print("Su\tMo\tTu\tWe\tTh\tFr\tSa");
//j从1开始 到这个月的天数结束
for(int j = 1 ; j <= daysOfMouth ; j ++){
count++;
//每打印七天就换行
if(count % 7 == 1){
System.out.print("\n");
}
//如果这月的第一天是周日就把它置为0 不打印额外制表符
if(whatDay==7)
whatDay = 0;
//这个月的第一天是周几就额外打印几次制表符
while (whatDay>0){
System.out.print("\t");
whatDay--;
count++;
}
//打印天数
System.out.print(j+"\t");
}
//打印完日历换行
System.out.println("\n");
}
}