一、java.util.Date
Date表示特定的瞬间,精确到毫秒,其子类有Date、Time、Timestap。默认情况下输出的Date对象为:Mon Oct 13 17:48:47 CST 2014,一般不是我们想要的,我们可以调用Date的一些方法来获取我们想要的日期格式,但是遗憾的是Date类中的大多数方法都已经废弃,如图1所示:
图 1 Date过期方法图
其中,public boolean after(Date when):测试此日期是否在指定日期之后-->当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间晚,才返回 true
;否则返回 false
。
public boolean before(Date when):测试此日期是否在指定日期之前-->当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间早,才返回 true
;否则返回 false。
public int compareTo(Date anotherDate):如果参数 Date 等于此 Date,则返回值 0
;如果此 Date 在 Date 参数之前,则返回小于 0
的值;如果此 Date 在 Date 参数之后,则返回大于 0
的值。
public boolean equals(Object obj):当且仅当参数不为 null
,并且是一个表示与此对象相同的时间点(到毫秒)的 Date
对象时,结果才为 true
。
示例1:
public static void main(String[] args) { //Date(long date) date即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数 Date firstDate = new Date(125); //无参构造器,返回当前时间,精确到毫秒 Date secondDate = new Date(); int order = firstDate.compareTo(secondDate); String str = ""; if (order == 0) { str = "相同"; } else { str = order > 0 ? "firstDate在后" : "secondDate在后"; } System.out.println(firstDate + "\t" + secondDate); System.out.println("firstDate 是否在secondDate之后:\t"+ firstDate.after(secondDate)); System.out.println("firstDate 是否在secondDate之前:\t"+ firstDate.before(secondDate)); System.out.println("firstDate 和 secondDate日期的顺序:\t"+ str); System.out.println("firstDate 和 secondDate是否相等:\t"+ firstDate.equals(secondDate)); }
结果1:
Thu Jan 01 08:00:00 CST 1970 Mon Oct 13 18:33:33 CST 2014 firstDate 是否在secondDate之后: false firstDate 是否在secondDate之前: true firstDate 和 secondDate日期的顺序: secondDate在后 firstDate 和 secondDate是否相等: false
示例2:
Date firstDate = new Date(System.currentTimeMillis()); // 无参构造器,返回当前时间,精确到毫秒 Date secondDate = new Date(); System.out.println(firstDate.getTime() + "\t" + secondDate.getTime()); System.out.println("firstDate 和 secondDate是否相等:\t" + firstDate.equals(secondDate));
结果2:
1413199559364 1413199559364 #getTime()值相等则两个Date对象的equals比值为true firstDate 和 secondDate是否相等: true
二、java.sql.Date
java.sql.Date是java.util.Date的子类,其自带方法中只有setTime(long date)、valueOf(String s)、toString()未过时。其中,toString方法输出的日期格式为:yyyy-mm-dd格式。valueOf(String s)将 JDBC 日期转义形式的字符串转换成 Date 值,s
- 表示 "yyyy-mm-dd" 形式的日期的 String
对象。
示例:
public static void main(String[] args) {
java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
System.out.println(date);
date.setTime(2222222222222L);
System.out.println(date);
java.sql.Date date1 = java.sql.Date.valueOf("2014-12-12"); //形参必须是:
"yyyy-mm-dd"格式:
System.out.println(date1);
}
结果:
2014-10-13 2040-06-02 2014-12-12
三、Timestamp
java.sql.Timestamp在Date的基础上衍生出public void setNanos(int n)方法,以获取Timestamp
对象的小数秒组件。
示例:
Timestamp timestamp = Timestamp.valueOf("2014-10-12 12:12:12.123"); // timestamp.getNanos()的值为:123000000 Timestamp timestamp2 = Timestamp.valueOf("2014-10-12 12:12:12"); // timestamp.getNanos()的值为:0
需要注意的是Timestamp的toString返回格式为:yyyy-mm-dd hh:mm:ss.fffffffff
。
示例:
public static void main(String[] args) { // 获取系统当前时间 Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp); //使用 yyyy-mm-dd hh:mm:ss.fffffffff 格式的 String 对象。最后ffffff的可以不要 // timestamp2.getNanos()的值为:123000000 Timestamp timestamp2 = Timestamp.valueOf("2014-10-12 12:12:12.123"); System.out.println(timestamp2); System.out.println(timestamp2.getNanos()); }
结果:
2014-10-13 19:15:48.757 2014-10-12 12:12:12.123 123000000
四、java.util.Calendar
java.util.Calendar 是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
Calendar
提供了一个类方法 getInstance
,以获得此类型的一个通用的对象。Calendar
的 getInstance
方法返回一个 Calendar
对象,其日历字段已由当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();可以通过get()方法获取年月日、时分秒。
示例:
public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); getyyyyMMdd(calendar); calendar.set(Calendar.YEAR, 2016); // 设置年份为2016年 calendar.set(Calendar.DAY_OF_MONTH, 30); // 设置为30号 getyyyyMMdd(calendar); calendar.add(Calendar.YEAR, 2); // 在原有年份上加上2年,实际应用中可用户查询今年、明年等 calendar.add(Calendar.MONTH, 2); // 在原有月份上加上2 getyyyyMMdd(calendar); } public static void getyyyyMMdd(Calendar calendar){ System.out.println(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE)+ ":" + calendar.get(Calendar.SECOND) ); }
结果:
2014-10-16 9:3:49 2016-10-30 9:3:49 2018-12-30 9:3:49
java.util.GregorianCalendar是 Calendar
的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
示例2:
Calendar calendar = new GregorianCalendar(2014, 10, 16, 15, 55, 44);//陷阱:Calendar的月份是0~11,12月份返回:0 //定义日期的中文输出格式,并输出日期 SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒 E", Locale.CHINA); System.out.println("获取日期中文格式化化输出:" + df.format(calendar.getTime())); System.out.println("--------通过Calendar获取日期中年月日等相关信息--------"); System.out.println("获取年:" + calendar.get(Calendar.YEAR)); System.out.println("获取月(月份是从0开始的):" + calendar.get(Calendar.MONTH)); System.out.println("获取日:" + calendar.get(Calendar.DAY_OF_MONTH)); System.out.println("获取时:" + calendar.get(Calendar.HOUR)); System.out.println("获取分:" + calendar.get(Calendar.MINUTE)); System.out.println("获取秒:" + calendar.get(Calendar.SECOND)); System.out.println("获取上午、下午:" + calendar.get(Calendar.AM_PM)); System.out.println("获取星期数值(星期是从周日开始的):" + calendar.get(Calendar.DAY_OF_WEEK)); System.out.println();
结:2:
获取日期中文格式化化输出:2014年11月16日 03时55分44秒 星期日 --------通过Calendar获取日期中年月日等相关信息-------- 获取年:2014 获取月(月份是从0开始的):10 //12月份返回:0 获取日:16 获取时:3 获取分:55 获取秒:44 获取上午、下午:1 //上午为:0 获取星期数值(星期是从周日开始的):1