Date 有多种生成方式,
如Date date =new Date(mYear,mMonth,mDay);
或者Date now =newDate();
前一种方法多好用啊,使用方便,便于理解,为什么要废弃呢?
问题是这两种方式生成的date是无法比较前后的。date.after(now)恒等于true
after方法是这样的
public boolean after(Date date) {
return milliseconds> date.milliseconds;
}
在上面return处打断点会发现 61468214400000>1510126305688。
这就奇怪了,毫秒数竟然差距这么大!
(61468214400000-1510126305688)/60/60/24/365/1000约等于1900
因为new Date(mYear,mMonth,mDay)方法中有这样一句话cal.set(1900+ year,month,day);
而new date()是根据System.currentTimeMillis()生成的。
所以,
通过new Date(mYear,mMonth,mDay)方法生成的date,
要比通过new Date()方法生成的date多了1900年的时间。
这也是为什么要废弃new Date(mYear,mMonth,mDay)的原因。
所以比较时间前后的时候,要使用同一种方法生成的date,date使用相同的构造函数。要么都通过日期生成,要么都使用毫秒生成。
现在大家知道为什么废弃Date(mYear,mMonth,mDay)方法了吗?