一,Date 类
在 JDK1.0 中,Date 类是唯一的一个代表时间的类,但是由于 Date 类不便于实现国际化,所以从 JDK1.1 版本开始,推荐使用 Calendar 类进行时间和日期处理.这里简单介绍一下 Date 类的使用.
1,使用 Date 类代表当前系统时间
Date date = new Date();
使用 Date 类的默认构造方法创建出来的对象就代表当前的时间,由于 Date 类覆盖了 toString() 方法.所以可以直接输出 Date 类型的对象,显示的结果如下:
Thu Jan 11 18 : 32 : 40 CST 2018
在该格式中,Thu 代表 Thursday(周四),Jan 代表 Janauary(一月),11 代表 11 号,CTS 代表 China Standard Time(中国标准时间,也就是北京时间 (东八区)).
2,使用 Date 类代表指定时间
使用带参的构造方法,可以构造指定日期的 Date 对象,Date 类中年份的参数应该是实际需要代表的年份减去 1990,实际需要代表的月份减去 1 以后的值.显示结果如下:
Date date = new Date(2017 - 1900, 1 - 1, 11);
System.out.println(date);
Wed Jan 11 00 : 00 : 00 CST 2017
实际代表的年月日时分秒的日期对象和这个类似
3,获取 Date 对象中的信息
使用 Date 类中的 get 方法,可以获得 Date 类对象的相关信息 (但可以看出,Date 类中的这些方法都已经过时).
package com.sc.util;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
Date d = new Date();
int year = d.getYear() + 1990;
int month = d.getMonth() + 1;
int date = d.getDate();
int hour = d.getHours();
int minute = d.getMinutes();
int second = d.getSeconds();
int day = d.getDay();
System.out.println("年份:" + year);
System.out.println("月份:" + month);
System.out.println("日期:" + date);
System.out.println("小时:" + hour);
System.out.println("分钟:" + minute);
System.out.println("秒:" + second);
System.out.println("星期:" + day);
}
}
View Code
需要注意的是使用 getYear 获得的是 Date 对象中年份减去 1900 以后的值,所以需要显示对应的年份则需要在返回值的基础上加 1900,月份类似.在 Date 类中还提供了 getDay 方法,用于获得 Date 对象代表的时间是星期几,Date 类规定周日是 0,周一是 1,周二是 2,后续的依次类推.
4,Date 对象和相对时间的互转
(1)将 Date 类的对象转换为相对时间
结果是:
Date d = new Date();
long t = d.getTime();
System.out.println(t);
1515671897851
(2)将相对时间转换为 Date 类的对象
结果是:
long time = 1290876532190L;
Date da = new Date(time);
System.out.println(da);
Sun Nov 28 00 : 48 : 52 CST 2010
5,Date 对象之间的比较
结果是:
Date date = new Date(2016 - 1900, 8 - 1, 28);
Date date1 = new Date();
System.out.println(date.compareTo(date1));
-1
date.compareTo(date1) 返回 int 类型.如果等于 0,则 date=date1; 如果小于 0,则 date
总结:使用 Date 对象中的 getTime 方法,可以将 Date 类的对象转换为相对时间,使用 Date 类的构造方法,可以将相对时间转换为 Date 类的对象.经过转换以后,既方便了时间的计算,也使时间显示比较直观了.
二,Calendar 类
从 JDK1.1 版本开始,在处理日期和时间时,系统推荐使用 Calendar 类进行实现 (Date 的一些方法都过时了).在设计上,Calendar 类的功能要比 Date 类强大很多,而且在实现方式上也比 Date 类要复杂一些,下面就介绍一下 Calendar 类的使用.
Calender 类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用 getInstance() 方法创建即可.
1,使用 Calendar 类代表当前时间
结果是:
Calendar c = Calendar.getInstance();
System.out.println(c); //返回的是一个Calendar对象
java.util.GregorianCalendar[time = 1515673764154, areFieldsSet = true, areAllFieldsSet = true, lenient = true, zone = sun.util.calendar.ZoneInfo[id = "Asia/Shanghai", offset = 28800000, dstSavings = 0, useDaylight = false, transitions = 19, lastRule = null], firstDayOfWeek = 1, minimalDaysInFirstWeek = 1, ERA = 1, YEAR = 2018, MONTH = 0, WEEK_OF_YEAR = 2, WEEK_OF_MONTH = 2, DAY_OF_MONTH = 11, DAY_OF_YEAR = 11, DAY_OF_WEEK = 5, DAY_OF_WEEK_IN_MONTH = 2, AM_PM = 1, HOUR = 8, HOUR_OF_DAY = 20, MINUTE = 29, SECOND = 24, MILLISECOND = 154, ZONE_OFFSET = 28800000, DST_OFFSET = 0]
注:由于 Calendar 类是抽象类,且 Calendar 类的构造方法是 protected 的,所以无法使用 Calendar 类的构造方法来创建对象,API 中提供了 getInstance 方法用来创建对象.使用该方法获得的 Calendar 对象就代表当前的系统时间,由于 Calendar 类 toString 实现的没有 Date 类那么直观,所以直接输出 Calendar 类的对象意义不大.
2,使用 Calendar 类代表指定的时间
使用 Calendar 类代表特定的时间,需要首先创建一个 Calendar 的对象,然后在设定该对象中的年月日参数来完成.
Calendar c1 = Calendar.getInstance();
c1.set(2016, 8 - 1, 28);
set 方法的声明为:public final void set(int year,int month,int date)
以上示例代码设置的时间为 2016 年 8 月 28 日,其参数的结构和 Date 类不一样.Calendar 类中年份的数值直接书写,月份的值为实际的月份值减 1,日期的值就是实际的日期值.
如果只设定某个字段某个字段,例如日期的值,则可以使用如下 set 方法:
public void set(int field, int value)
在该方法中,参数 field 代表要设置的字段的类型,常见类型如下:
(1)Calendar.YEAR---年份;
(2)Calendar.MONTH---月份;
(3)Calendar.DATE---日期;
(4)Calendar.DAY_OF_MONTH---日期,和Calendar.DATE字段完全相同;
(5)Calendar.HOUR---12小时制的小时数;
(6)Calendar.HOUR_OF_DAY---24小时制的小时数;
(7)Calendar.MINUTE---分钟;
(8)Calendar.SECOND---秒;
(9)Calendar.DAY_OF_WEEK---星期几.
后续的参数 value 代表设置成的值.
例如:c1.set(Calendar.DATE,10); 该代码的作用是将 c1 对象代表的时间中日期设置为 10 号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等.
3,获得 Calendar 类中的信息
在 Calendar 类中,周日是 1,周一是 2,周二是 3,依次类推.
package com.sc.util;
import java.util.Calendar;
public class DateTest {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int year = c.get(c.YEAR);
int month = c.get(c.MONTH) + 1;
int date = c.get(c.DAY_OF_MONTH);
int hour = c.get(c.HOUR_OF_DAY);
int minute = c.get(c.MINUTE);
int second = c.get(c.SECOND);
int day = c.get(Calendar.DAY_OF_WEEK);
System.out.println("年份" + year);
System.out.println("月份" + month);
System.out.println("日期" + date);
System.out.println("小时" + hour);
System.out.println("分钟" + minute);
System.out.println("秒" + second);
System.out.println("星期" + day);
}
}
View Code
4,其他方法说明
其实 Calendar 类中还提供了很多其他有用的方法,下面简单的介绍几个常见方法的使用.
(1)add 方法
public abstract void add(int field, int amount)
该方法的作用是在 Calendar 对象中的某个字段上增加或减少一定的数值,增加是 amount 的值为正,减少是 amount 的值为负.
例如计算当前时间 100 天以后的日期,代码如下:
这里 add 方法是指在 c3 对象的 Calendar.DATE,也就是日期字段上增加 100,类内部会重新计算该日期对象中其它各字段的值,从而获得 100 天以后的日期,例如程序的输出结果可能为:2018 年 3 月 21 日
Calendar c3 = Calendar.getInstance();
c3.add(Calendar.DATE, 100);
int year = c3.get(Calendar.YEAR);
int month = c3.get(Calendar.MONTH);
int date = c3.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
(2)after 方法
public boolean after(Object when)
该方法的作用是判断当前日期对象是否在 when 对象的后面,如果在 when 对象的后面则返回 true,否则返回 false.例如:
在该示例代码中对象 c4 代表的时间是 2016 年 8 月 28 号,对象 c5 代表的时间是 2016 年 10 月 1 号,则对象 c5 代表的日期在 c4 代表的日期之后,所以 after 方法的返回值是 true.
Calendar c4 = Calendar.getInstance(); c4.set(2016,8-1,28);
Calendar c5 = Calendar.getInstance();c5.set(2016,10-1,1);
boolean b = c5.after(c4);
System.out.println(b);
另外一个类似的方法是 before,该方法是判断当前日期对象是否位于另外一个日期对象之前
5,Calendar 对象和相对时间之间的转换
(1)将 Calendar 对象转换成 Calendar 对象
来源: http://www.bubuko.com/infodetail-2459516.html