Java万年历案例
用户输入年份和月份,打印出当月的日历信息
要点:
因为万年历里面的程序设置的初值是1900年1月1日。 所以日期的计算要从1900年1月1日开始
方法:
- 算出1900年1月1日到输入年月的总天数
- 使用总天数算出输入月的第一天是周几
- 算出输入月有多少天
- 输出打印
- 闰年条件:被4整除并且不能被100整除,或者被400整除
if(i%40 && i%100!=0 ||i%4000)
步骤:
1.获取1900年1月1日到输入年份和月份的总天数
//输入:
Scanner sc = new Scanner(System.in);
System.out.println("请输入年:");
int year = sc.nextInt();
System.out.println("请输入月:");
int month = sc.nextInt();
//得到1900,1,1年到输入年月的总天数
int allDayOfYear = 0;
for(int i =1900;i<year;i++){
if(i%4==0 && i%100!=0 ||i%400==0){
allDayOfYear +=366;//闰年就加366天
}else{
allDayOfYear +=365; //平年365天
}
}
//求月之间的差
int allDayOfMonth=0;
for(int i = 1;i<month;i++){
switch(i){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
allDayOfMonth +=31;
break;
case 4:case 6:case 9:case 11:
allDayOfMonth +=30;
break;
case 2:
if(year%4==0 && year%100!=0 ||year %400==0){
allDayOfMonth +=29;
}else{
allDayOfMonth +=28;
}
}
}
//合并天数
int allDay = allDayOfYear+allDayOfMonth;
2.算出输入月份的第一天是周几
//算出当月第一天是星期几
int week = allDay%7 +1; //+1算出的是输入月的第一天,不加1算出的是上月最后一天是星期几
if(week==0){
week =7;
}
3.所处当月有多少天
//算出当月天数
int day = 0;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day =31; //1,3,5,7,8,10,12一直是31天
break;
case 4:case 6:case 9:case 11:
day=30; // 4,6,9,11一直是30天
break;
case 2:
if(year%4==0 && year%100!=0 ||year %400==0){ //二月会有平闰年之分
day=29; //闰年29天
}else{
day = 28; //平年28天
}
}
4.打印日历
//打印万年历
System.out.println(year+"年"+month+"月");
System.out.println("-------------------------------------------------------");
System.out.println("一\t二\t三\t四\t五\t六\t七");
int flage = 0; //声明一个变量,记录当前输入的是周几的日期,如果到了7或者7的倍数,就进行换行,也就是标志量的作用
//打印如果1号不是星期1前面的空格
for(int i =1;i<week;i++){ //week是算出的当前月第一天周几
System.out.print("\t"); //注意这里不换行
flage ++;
}
//打印日期
for(int i=1;i<=day;i++){ //遍历打印当前月的天数
System.out.print(i+"\t");
flage++;
if(flage%7==0){ //flage 每加到7或者7的倍数就换行,对应周几
System.out.println("\n");
}
}