昨天在课堂上听老师讲月历的程序,自己动手实现了一下。这里分享一个封装的日期类。
package ToolPackage; public class MyDate { private int year,month,day; //私有成员变量 private static int thisYear; //当前年份,私有静态成员变量 static{ thisYear = 2015; } public MyDate(int year,int month,int day){//构造函数,指定日期 this.set(year,month,day); //调用本类的成员方法 } public MyDate(){//默认构造方法,指定默认日期,重载 this(1970,1,1); } public MyDate(MyDate d){//拷贝构造函数 this.set(d); } public void set(int year,int month,int day){//设置日期值。算法不全 this.day=day; this.month=month; this.year=year; } public void set(MyDate d){//设置日期值,重载 set(d.year,d.month,d.day); } public int getYear(){//获取年份 return this.year; } public int getMonth(){ return this.month; } public int getDay(){ return this.day; } public String toString(){//返回中文日期字符串 return this.year+"年"+this.month+"月"+this.day+"日"; } public static int getThisYear(){//获取今年年份,静态方法 return thisYear; } public static boolean isLeapYear(int year){//判断指定年份是否是闰年 return year%400==0||year%100!=0&&year%4==0; } public boolean isLeapYear(){//判断当前日期的年份是否为闰年 return isLeapYear(this.year); } public boolean equals(MyDate d){//比较当前日期和d是否相等 return this==d||this.year==d.year&&this.month==d.month&&this.day==d.day; } public static int daysOfMonth(int year,int month){//返回指定年月的天数,静态方法 switch(month){ 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:return isLeapYear(year)?29:28; default :return 0; } } public int daysOfMonth(){//返回当月天数 return daysOfMonth(this.year,this.month); } public void tomorrow(){//当前日期改为第二天日期 this.day++; if(day>this.daysOfMonth()){ day=1; month++; if(month>12){ month=1; year++; } } } public MyDate yestoday(){//返回当前日期的前一天日期 MyDate yes=new MyDate(this);//执行拷贝构造函数,创建新实例,没有改变当前对象 yes.day--; if(yes.day==0){ yes.month--; if(yes.month==0){ yes.month=12; yes.year--; } yes.day=daysOfMonth(yes.year,yes.month); } return yes; //返回对象引用 } }
--------------------顺便分享一下月历吧------------------------------
package teacherHomework; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import ToolPackage.MyDate; public class MonthCalendar { public String toString (){ Calendar now = Calendar.getInstance();//当前日期时间 int year = now.get(Calendar.YEAR);//年份 int month = now.get(Calendar.MONTH)+1;//月份 now.set(year, month-1, 1);//设置当月1号 int week = now.get(Calendar.DAY_OF_WEEK)-1; String str=year+"年"+month+"月的月历 日 一 二 三 四 五 六 "; str+=String.format("%"+4*week+"c",' ');//设置前导空格 int days= MyDate.daysOfMonth(year,month); //计算出当月天数 for(int i=1;i<=days;i++){ str+=String.format("%4d", i); if((week+i)%7==0) str+=" "; } return str; } public static void main(String[] args) { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日EEEEE a hh 时mm分ss秒"); System.out.println(sdf.format(new Date()));//当前日期和时间 System.out.println(new MonthCalendar().toString()); } }