我们可以用Date和Calendar处理时间和日期的各种操作,如进行对日期,时间的加减运算,或者获取指定时间的年,月,日,时,分,秒的信息等。
Date类·
Date类是一个很古老的类,在jdk1.0就有了,所以很多方法都过时了,一般我们只用到这2个构造方法和getTime方法
private transient long fastTime;
public Date() {
this(System.currentTimeMillis());
}
public Date(long date) {
fastTime = date;
}
public long getTime() {
return getTimeImpl();
}
private final long getTimeImpl() {
if (cdate != null && !cdate.isNormalized()) {
normalize();
}
return fastTime;
}
这里的getTime返回的是fastTime,是一个整形的,从GMT 1970-01-01 00:00:00到改Date对象生成的时间差,单位是毫秒。
Calendar类
如果我们要进行对日期,时间的加减运算,或者获取指定时间的年,月,日,时,分,秒的信息,可以使用Calender类。
由于Calendar类是一个抽象类,不能实例化,但是我们可以用getInstance这种方法获得Calendar对象。
Calendar与Date转换
Date date=new Date();
Calendar calender1= Calendar.getInstance();
//设置date
calender1.setTime(date);
//获取Date
Date date2=calender1.getTime();
int get(int field) 方法获取指定日历字段的值
Calendar calender= Calendar.getInstance();
//获取年
System.out.println(calender.get(Calendar.YEAR));
//获取月
System.out.println(calender.get(Calendar.MONTH));
//获取日
System.out.println(calender.get(Calendar.DATE));
void set()方法是设置日历
可以给某个字段设置,也可以设置年,月,日到秒6个字段
void add(int filed,int amount) 方法,给日历指定字段添加或者减去时间量
如果字段超出访问,会发生进位,变化后下级也会根据实际改变,如
Calendar calender= Calendar.getInstance();
calender.set(2019,4,31,0,0);
//年份推前一年 结果变成2018
calender.add(Calendar.YEAR,-1);
//月份推后一个月 结果变成 2020-4 如果字段超出访问,会发生进位
calender.add(Calendar.MONTH,12);
//由于2020年2月没有31号。所以会变成2020年2月29日
calender.add(Calendar.MONTH,10);
void roll方法,给日历指定字段添加或者减去时间量
如果字段超出访问,不会发生进位,变化后下级也会根据实际改变,如
Calendar calender= Calendar.getInstance();
calender.set(2019,4,17,0,0);
//年份推前一年 结果变成2018
calender.roll(Calendar.YEAR,-1);
//月份推后一个月 结果变成 2090-4 如果字段超出访问,不会发生进位
calender.roll(Calendar.MONTH,12);
//由于2019年2月没有31号。所以会变成2020年2月28日
calender.add(Calendar.MONTH,10);
原创来源:滴一盘技术