Java用Date和Calendar处理时间和日期,获取年,月,日

我们可以用Date和Calendar处理时间和日期的各种操作,如进行对日期,时间的加减运算,或者获取指定时间的年,月,日,时,分,秒的信息等。

Date类·

Date类是一个很古老的类,在jdk1.0就有了,所以很多方法都过时了,一般我们只用到这2个构造方法和getTime方法

  1. private transient long fastTime;
  2. public Date() {
  3. this(System.currentTimeMillis());
  4. }
  5. public Date(long date) {
  6. fastTime = date;
  7. }
  8. public long getTime() {
  9. return getTimeImpl();
  10. }
  11. private final long getTimeImpl() {
  12. if (cdate != null && !cdate.isNormalized()) {
  13. normalize();
  14. }
  15. return fastTime;
  16. }

这里的getTime返回的是fastTime,是一个整形的,从GMT 1970-01-01 00:00:00到改Date对象生成的时间差,单位是毫秒。

Calendar类
如果我们要进行对日期,时间的加减运算,或者获取指定时间的年,月,日,时,分,秒的信息,可以使用Calender类。

由于Calendar类是一个抽象类,不能实例化,但是我们可以用getInstance这种方法获得Calendar对象。

Calendar与Date转换

  1. Date date=new Date();
  2. Calendar calender1= Calendar.getInstance();
  3. //设置date
  4. calender1.setTime(date);
  5. //获取Date
  6. Date date2=calender1.getTime();
  7. int get(int field) 方法获取指定日历字段的值
  8. Calendar calender= Calendar.getInstance();
  9. //获取年
  10. System.out.println(calender.get(Calendar.YEAR));
  11. //获取月
  12. System.out.println(calender.get(Calendar.MONTH));
  13. //获取日
  14. System.out.println(calender.get(Calendar.DATE));

void set()方法是设置日历
可以给某个字段设置,也可以设置年,月,日到秒6个字段

void add(int filed,int amount) 方法,给日历指定字段添加或者减去时间量
如果字段超出访问,会发生进位,变化后下级也会根据实际改变,如

  1. Calendar calender= Calendar.getInstance();
  2. calender.set(2019,4,31,0,0);
  3. //年份推前一年 结果变成2018
  4. calender.add(Calendar.YEAR,-1);
  5. //月份推后一个月 结果变成 2020-4 如果字段超出访问,会发生进位
  6. calender.add(Calendar.MONTH,12);
  7. //由于2020年2月没有31号。所以会变成2020年2月29日
  8. calender.add(Calendar.MONTH,10);

void roll方法,给日历指定字段添加或者减去时间量
如果字段超出访问,不会发生进位,变化后下级也会根据实际改变,如

  1. Calendar calender= Calendar.getInstance();
  2. calender.set(2019,4,17,0,0);
  3. //年份推前一年 结果变成2018
  4. calender.roll(Calendar.YEAR,-1);
  5. //月份推后一个月 结果变成 2090-4 如果字段超出访问,不会发生进位
  6. calender.roll(Calendar.MONTH,12);
  7. //由于2019年2月没有31号。所以会变成2020年2月28日
  8. calender.add(Calendar.MONTH,10);