Java中关于日期的三个类
1、具体类(和抽象类相对)java.util.Date
2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat
3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar
在jdk1.1之前,date无所不能(无视),但是用jdk自己的话:Unfortunately, the API for these functions was not amenable to internationalization.在jdk1.1之后,date出现了分支:Calendar
用于日期和时间之间的转换;DateFormat用于格式化和解析时间字符串。Date为具体类,Calendar和DateFormat为抽象类用于提供各种方法。
构造函数:
//date只有两种构造方法,其他都被阉割了。分别是空的和带long参数的
public static void testConstructor() {
//无参数的构造方法,获得当前的时间
//输出:Mon Jul 23 15:20:43 CST 2012
Date date=new Date();
System.out.println(date);
//带有long参数的构造方法
long tmp=new Long("1231423432423");
//long tmp2=1231423432423l;new 和直接赋值都可,但是后者得加"l"
date=new Date(tmp);
System.out.println(date);
}
方法:
//date的方法,貌似就个getTime()有用
public static void testMethod () {
Date date=new Date();
//after 和 before忽略
//clone返回对象的一个拷贝,此处体现了多态的特性
//即虽然返回的date被object类型的tmp引用,但是toString()方法任然是date重写后的方法,而非object方法
Object tmp=date.clone();
System.out.println(date.toString());
System.out.println(tmp.toString());
//两者都输出Mon Jul 23 16:01:10 CST 2012
//compareTo 和 equals 忽略
//getTime()大概唯一具有实际意义的一个方法,返回自1970年1月1号的毫秒
System.out.println(date.getTime());
}
再先看Calendar:简单的看Calendar有一个getInstance()方法可以获得本地的“日历”,再通过get()方法可以获得这个“日历”里的各种信息,这是获取信息,与之对应的可以通过set()方法来改变“日历”中的信息,从而获得自己需要的日期以及更多关于日期的计算。
//Calendar中提供了N多字段已经各种对时间的操作方法
public static void testCalendar() {
//通过getInstance()获得本机的一个时间实例
Calendar cal=Calendar.getInstance();
System.out.println(cal);//--内部中所有的字段存储在fields中
System.out.println(cal.get(Calendar.YEAR));//--获得日历中的年(也可以获得其他月,日等)
//通过set方法设置时间。java时间操作最终改变的是getTime()的值,getTime()返回的值为相对精确的一个时间
//通过format类可以设置各种时间格式
cal.set(2011, 9, 19);
Date date=cal.getTime();
System.out.println(date);
}
最后看DateFormat,主要看它的实现类SimpleDateFormat。目前就一个构造方法可用,具体用法看jdk。
public static void testDateFormat() {
Date date=new Date();
//主要是几个日期字符的操作,可以参考JDK
SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("yyyy/MM/dd HH:mm");
SimpleDateFormat simpleDateFormat2=new SimpleDateFormat("今年是yyyy");
System.out.println(simpleDateFormat1.format(date));//输出“2012/07/24 23:54”
System.out.println(simpleDateFormat2.format(date));//输出“今年是2012”
}
JDK格式表:
Letter | Date or Time Component | Presentation | Examples |
| Era designator | Text |
|
| Year | Year |
|
| Month in year | Month |
|
| Week in year | Number |
|
| Week in month | Number |
|
| Day in year | Number |
|
| Day in month | Number |
|
| Day of week in month | Number |
|
| Day in week | Text |
|
| Am/pm marker | Text |
|
| Hour in day (0-23) | Number |
|
| Hour in day (1-24) | Number |
|
| Hour in am/pm (0-11) | Number |
|
| Hour in am/pm (1-12) | Number |
|
| Minute in hour | Number |
|
| Second in minute | Number |
|
| Millisecond | Number |
|
| Time zone | General time zone |
|
| Time zone | RFC 822 time zone |
|