📄 mydate.java
字号:
package com.tarena.abs.test;
import java.io.Serializable;
import java.util.*;
/**
* 我们自己定义的代表日期的类。继承自java.util.GregorianCalendar
* @author tangliang
*
*/
public final class MyDate extends GregorianCalendar implements Serializable{
//private Calendar calendar;calendar不能映射
//private Date date;
//为了作为组件映射到FlightSch中而定义的属性
// private int year;
// private int month;
// private int day;
/**
* 通过给定的年月日值来构造一个日期对象。
* @param year 年
* @param month 月
* @param day 日
* @throws IllegalDateFormatException 如果日期格式不对则抛出此异常。
*/
public MyDate(){
}
public MyDate(int year, int month, int day){
super(year,month-1,day);
// this.year=year;
// this.month=month;
// this.day=day;
//date= new Date(year,month-1,day);
//this.setTime(date);
/*calendar = Calendar.getInstance() ;
calendar.set(year,month-1,day);*/
if(!isLegalDate(year,month,day)){
throw new IllegalDateFormatException("日期格式不对");
}
}
/*public Date getDate() {
System.out.println(date);
return date;
}
public void setDate(Date date) {
System.out.println(date);
this.date = date;
this.setTime(date);
}*/
/*public Calendar getCalendar() {
return calendar;
}
public void setCalendar(Calendar calendar) {
this.calendar = calendar;
}*/
/**
* 判断给定的三个年月日值是否合法。
* @param year 年份
* @param month 月份
* @param day 日期
* @return 若合法则返回true,否则返回false。
*/
public static boolean isLegalDate(int year,int month,int day){
int[] daysOfMonth={31,28,31,30,31,30,31,31,30,31,30,31};
if(year<1900||year>2100||month<1||month>12)
return false;
if(isYeap(year)){
daysOfMonth[1]=29;
}
if(day<1||day>daysOfMonth[month-1])
return false;
return true;
}
/**
* 判断给定的年份是否是闰年。
* @param year 给定的年份
* @return 是闰年返回true,否则返回false。
*/
public static boolean isYeap(int year){
if(year%400==0)
return true;
if(year%4==0&&year%100!=0)
return true;
return false;
}
/**
* 该方法根据给定的分隔符来解析给定的日期字符串,将其构造为一个日期对象。
* @param str 给定的日期字符串。
* @param separator 分隔符号。
* @return 构造好的一个日期对象。
*/
public static MyDate getDateFromStr(String str,String separator){
String[] st = str.split(separator);
int year=Integer.parseInt(st[0]);
int month=Integer.parseInt(st[1]);
int day=Integer.parseInt(st[2]);
return new MyDate(year,month,day);
}
/**
* 覆盖的equals()方法,若两个日期对象得年月日都相同则返回true,否则返回false。
*/
public boolean equals(Object o){
if(o instanceof MyDate){
MyDate md=(MyDate)o;
return md.getYear()==this.getYear()
&& md.getMonth()==this.getMonth()
&& md.getDay()==this.getDay();
}
return false;
}
/**
* 得到该日期的年份
* @return
*/
public int getYear(){
return this.get(Calendar.YEAR);
//return date.getYear();
//return this.calendar.get(Calendar.YEAR);
}
/**
* 得到该日期的月份
* @return
*/
public int getMonth(){
return this.get(Calendar.MONTH)+1;
//return date.getMonth()+1;
//return this.calendar.get(Calendar.MONTH)+1;
}
/**
* 得到该日期是几号
* @return
*/
public int getDay(){
return this.get(Calendar.DAY_OF_MONTH);
//return date.getDay();
//return this.calendar.get(Calendar.YEAR);
}
/**
* 得到该日期是星期几
* @return
*/
public int getWeekDay(){
//星期7123456,
//对应值1234567
return this.get(Calendar.DAY_OF_WEEK);
//return this.calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 覆盖的hashCode()方法。
*/
public int hashCode(){
return this.getYear()^
this.getMonth()^
this.getDay();
}
/**
* 覆盖的toString方法,返回年月日和星期。
* 例如: "2007年1月30日 星期二"
*/
public String toString(){
StringBuffer sb=new StringBuffer(this.getYear()+"年"+
this.getMonth()+"月"+
this.getDay()+"日 ");
switch(this.get(Calendar.DAY_OF_WEEK)){
case 1: sb.append("星期日"); break;
case 2: sb.append("星期一"); break;
case 3: sb.append("星期二"); break;
case 4: sb.append("星期三"); break;
case 5: sb.append("星期四"); break;
case 6: sb.append("星期五"); break;
case 7: sb.append("星期六"); break;
}
return sb.toString();
}
/**
* 返回使用符号"-"分隔的日期字符串。
* 例如:"2007-1-30"
* @return
*/
public String simpleString(){
return this.getYear()+"-"+
this.getMonth()+"-"+
this.getDay();
}
public MyDate getNextDay(){
int y=this.getYear();
int m=this.getMonth();
int d=this.getDay();
if(MyDate.isLegalDate(y,m,d+1))
return new MyDate(y,m,d+1);
else if(MyDate.isLegalDate(y,m+1,1))
return new MyDate(y,m+1,1);
else if(MyDate.isLegalDate(y+1,1,1))
return new MyDate(y+1,1,1);
else return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -