【问题描述】借助Calendar类,设计一个日期类MyDate,能根据多种输入数据创建日期对象,可对日期进行计算,并以不同的模式输出日期。类图如下:
【输入形式】1-8的整数
【输出形式】输入1,则输出2010-10-10
功能代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MyDate {
Calendar c = Calendar.getInstance();//Calendar实例化;
String pattern = "yyyy-MM-dd";
public MyDate(String source,String pattern){
this.pattern = pattern;
SimpleDateFormat datef = new SimpleDateFormat(pattern);
//try catch :当程序错误时,仍保证程序的正常运行
try {
Date D = datef.parse(source);//Simple~是DateFormat子类 将source转为Date
c.setTime(D);//date类型转为Calendar
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public MyDate(String source){
SimpleDateFormat datef = new SimpleDateFormat(pattern);//规定一种形式
try {
Date D = datef.parse(source);
c.setTime(D);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public MyDate(int y,int m,int d){
c.set(y,m-1,d);
}
public MyDate(){
this(0,0,0);
}
public String toString(){
//创造一个SimpleDateFormat实例来做模式化输出;
SimpleDateFormat datef = new SimpleDateFormat(this.pattern);//规定一种输出格式pattern
return datef.format(c.getTime());//调用format方法将Date(calendar转为date)编为String返回
}
public MyDate after(int n){
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date = c.get(Calendar.DATE);
//get(Calendar字段)获取字段值(年月日)Calendar以0对齐
MyDate rdate = new MyDate(year,month,date);
//add(需要更改的字段,增加的天数)
rdate.c.add(Calendar.DATE,n);
return rdate;
}
public MyDate before(int n){
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date = c.get(Calendar.DATE);
MyDate rdate = new MyDate(year,month,date);
rdate.c.add(Calendar.DATE,-n);
return rdate;
}
public Date getDate(){
return c.getTime();
}
public Calendar getCalendar(){
return this.c;
}
public long getlong(){
return c.getTimeInMillis();
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
}
测试代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int selected;
Scanner in=new Scanner(System.in);
selected=in.nextInt();
MyDate md=new MyDate(2000,10,10);
switch(selected){
case 1:
System.out.println(md);
break;
case 2:
md=new MyDate("2010-10-10");
System.out.println(md);
break;
case 3:
md=new MyDate("2010/10/10","yyyy/MM/dd");
System.out.println(md);
break;
case 4:
System.out.println(md.after(8));
break;
case 5:
System.out.println(md.before(20));
break;
case 6:
System.out.println(md.getCalendar().get(Calendar.YEAR));
break;
case 7:
md.setPattern("yyyy/MM/dd");
System.out.println(md);
}
in.close();
}
}