java学习日记----------------------封装的日期类MyDate

昨天在课堂上听老师讲月历的程序,自己动手实现了一下。这里分享一个封装的日期类。

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+"月的月历\n     日       一      二      三     四       五     六\n";
        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+="\n";
        }
        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());
    }

}