昨天写了关于String的ADT,今天写一个关于Date的ADT,话不多说,直接上代码
package com.java.datastructure.mydateclass;
/**
* @author Ryan Xu
*/
public interface IMyDate {
public void advance(int n);
public String toString();
}
下面是IMyDate 的具体实现,方法一:
package com.java.datastructure.mydateclass;
/**
* MyData Impl
* @author Ryan Xu
*/
public class MyDateClass implements IMyDate {
private int year;
private int month;
private int day;
/**
* 构造方法
* @param year
* @param month
* @param day
*/
public MyDateClass(int year , int month, int day){
if(month<1 || month>12 || day<1 || day>length(month, year)){
throw new IllegalArgumentException("Improper Date");
}
this.year = year;
this.month = month;
this.day = day;
}
/**
* 根据年月计算每个月的天数
* @param month
* @param year
* @return
*/
private int length(int month , int year){
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 (isLeap(year) ? 29 : 28);
default: return -1;
}
}
/**
* 判断是否是闰年
* @param year
* @return true、false
*/
private boolean isLeap(int year){
return (year % 4==0 && (year%100!=0 || year %400==0));
}
/**
* 用于把当前日期向未来推进n天
* @param n
*/
public void advance(int n) {
day +=n;
int last;
while(day>(last = length(month, year))){
day-=last;
month++;
if(month > 12){
month =1;
year++;
}
}
}
/**
* 将日期转换成字符串形式
*/
public String toString(){
return year+"-"+month+"-"+day;
}
/**
* @param args
*/
public static void main(String[] args) {
}
}
方法二:
package com.java.datastructure.mydateclass;
/**
* @author Ryan Xu
*/
public class MyDateClass2 implements IMyDate {
private int year;
private int day;
/**
* 构造方法
* @param year
* @param month
* @param day
*/
public MyDateClass2(int year , int month, int day){
if(month < 1 || month > 12 || day < 1 || day > length(month, year)){
throw new IllegalArgumentException("Improper date!");
}
for(int i = 1; i < month; i++){
day += length(i, year);
}
this.year = year;
this.day = day;
}
/**
* 用于把当前日期向未来推进n天
* @param n
*/
public void advance(int n) {
this.day += n;
int last;
while(day > (last = (isLeap(year) ? 366 : 365))){
day -= last;
year++;
}
}
public String toString(){
int month = 1, d = day;
int last;
while(d > (last = length(month, year))){
d -= last;
month++;
}
return year + "-" + month + "-" + d;
}
/**
* 根据年、月计算每个月的天数
* @param month
* @param year
* @return
*/
private int length(int month , int year){
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 (isLeap(year) ? 29 : 28);
default: return -1;
}
}
/**
* 判断是否是闰年
* @param year
* @return true、false
*/
private boolean isLeap(int year){
return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
}
public static void main(String[] args) {
}
}