练习打印万年历

代码如下:

import java.util.Scanner;
/*
 * 练习打印万年历
 */
public class Demo36 {
public static void main(String[] args) {
//从键盘上接收一个年月
Scanner sc=new Scanner(System.in);
System.out.println("请输入年和月:");
int year=sc.nextInt();
int month=sc.nextInt();
//打印这月的日历
printCalendar(year,month);
}
private static void printCalendar(int year,int month) {
System.out.println("日\t一\t二\t三\t四\t五\t六");

//这个月的第一天是星期几
int fromDay=getWeekday(year,month,1);

//打印这个月第一天之前的空白
for(int i=1;i<=fromDay;i++) {
System.out.print("\t");
}
int count=fromDay; //定义变量统计打印的天数
//打印这个月的第一天
for(int day=1;day<=getDaysOfMonth(year,month);day++) {
System.out.print(day+"\t");
count++;
if(count%7==0)
System.out.println("");
}
}
//返回year年month月day天是星期几,数字0代表星期日,1~6代表星期一~星期六
private static int getWeekday(int year,int month,int day) {
//先计算900年1月1日到指定year年month月day日共有多少天
int sum=getDaysFrom19000101(year,day);
return sum%7;
}
private static int getDaysFrom19000101(int year,int day) {
int sum=0;
//先计算1900-1-1到year-1年12月31日共有多少天
for(int y=1900;y<year;y++) {
sum+=getDaysOfYear(y);
}
//再加上当年的天数
sum+=getDaysToDateInCurrentYear(year,day);
return sum;
}
//计算当年从1月1日到指定的month月day日共有多少天
private static int getDaysToDateInCurrentYear(int year,int day) {
int sum=0;
//累加前month-1个月的天数
for(int m=1;m<month;m++) {
sum+=getDaysOfMonth(year,m);
}
//累加当月的天数
return sum+day;
}
//计算year年m月有多少天
private static int getDaysOfMonth(int year,int m) {
switch (m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if(isLeapYear(year))
return 29;
else 
return 28;
}
return 0;
}
//计算每年的天数
private static int getDaysOfYear(int y) {
if(isLeapYear(y)) {
return 366;
}
return 365;
}
//判断某一年是否为闰年
private static boolean isLeapYear(int y) {
if(y%4==0&&y%100!=0||y%400==0)
return true;
return false;
}
}

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...