下面来讲万年历的制作。
根据给出的年,月,日信息,来输出当前月份的信息,最终效果如下:
以1900年1月1日(星期一)为基准,来计算当前的星期。关键在于要计算1900年1月1日距今的天数days。得出days后即可通过取余得出当前日期的星期信息,需要注意的是,计算星期时,使用的应该是当月第一天距1900年1月1日的天数。在计算days时,要特别注意闰年的情况。
贴出代码如下
package PermanentCalender;
public class PermanentCalender {
/**
* @主站坦克
*/
final static int INIT_YEAR = 1900;
int year ;
int month;
int day;
int []daysOfMonth = new int[12];
int weekday; //表示当月的第一天是星期几
int days;
String blank ;
int[] calender ;
//判断是否是闰年
public static boolean isLeapYear(int year)
{
if(year%4==0&&(year%100!=0||year%400==0))
{
return true;
}
else
{
return false;
}
}
//构造函数,初始化了daysOfMonth(代表当年的每月有几天)
public PermanentCalender(int year,int month,int day)
{
this.year = year;
this.month = month;
this.day = day;
int j ;
for(int i = 0 ; i<12;i++)
{
j = i + 1;
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
{
this.daysOfMonth[i] = 31;
}
else if(j==2)
{
if(isLeapYear(year))
{
this.daysOfMonth[i] = 29;
}
else
{
this.daysOfMonth[i] = 28;
}
}
else
{
this.daysOfMonth[i] = 30;
}
}
calender = new int[this.daysOfMonth[month - 1]];
setCalender();
}
//计算距给出的日期有多少天
private void calDays()
{
int temp = year - INIT_YEAR;
int count = 0;
for(int i = INIT_YEAR;i<year;i++)
{
if(isLeapYear(i))
{
count++;
}
}
for(int i = 0;i < month - 1;i++)
{
this.days += daysOfMonth[i];
}
this.days =this.days+ temp*365 + count + 1 ;
}
//给当月设置天数等数据
private void setCalender()
{
int j ;
this.calDays();
this.calWeekday(days);
for(int i = 0 ; i < daysOfMonth[month - 1 ];i++)
{
calender[i]= i + 1;
}
}
//打印输出日历
public void printCalender()
{
System.out.println("\t\t------"+year +"年" + month +"月"+ day +"日------");
System.out.println("\t周日\t周一\t周二\t周三\t周四\t周五\t周六");
switch(weekday)
{
case 1:
blank = "\t";
break;
case 2:
blank = "\t\t";
break;
case 3:
blank = "\t\t\t";
break;
case 4:
blank = "\t\t\t\t";
break;
case 5:
blank = "\t\t\t\t\t";
break;
case 6:
blank = "\t\t\t\t\t\t";
break;
case 7:
blank ="";
break;
default:
blank = "";
break;
}
System.out.print(blank);
int j ;
//输出万年历的第一行日期
for( j = 0; j<(7 - weekday); j++)
{
System.out.print("\t"+calender[j]);
}
System.out.println();
int count = 0;
for(int i = j; i < calender.length;i++)
{
System.out.print("\t"+calender[i]);
count++;
if(count == 7)
{
System.out.println();
count =0;
}
}
System.out.println();
}
//计算星期几
private void calWeekday(int days)
{
this.weekday=days%7;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}