日期函数的用例:
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();//当前系统日期
/*
* 求某一时间之前(或之后)的日期
*/
calendar.set(2012, Calendar.MARCH, 31);//设置calendar为2012年3月31日
System.out.println(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH, 45);//45天之后的日期(负数就是多少天之前)
System.out.println(calendar.getTime());
/*
* 求某一时间段的天数
*/
calendar = Calendar.getInstance();
String strDate = "2012-03-01 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(strDate);
long l = new Date().getTime() - date.getTime();
long countDays = l/(1000*60*60*24);//时间段的天数
System.out.println(countDays);
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException("时间格式转换错误");
}
}
Calendar类中add(int field, int amount)和roll(int field, int amount)的区别:
1.首先相同点:都是求某一时间,某一属性之前(或之后)的时间
2.不同点:roll()方法操作的时候不更改更大的字段,add()会更改更大的字段
calendar = Calendar.getInstance();
calendar.set(2012, Calendar.MARCH, 23);
calendar.add(Calendar.DAY_OF_MONTH, 10);//10天之后的日期
System.out.println(calendar.getTime());//Mon Apr 02 11:17:00 CST 2012天数超出,进位月数
calendar.set(2012, Calendar.MARCH, 23);
calendar.roll(Calendar.DAY_OF_MONTH, 10);
System.out.println(calendar.getTime()); //Fri Mar 02 11:17:00 CST 2012不会更改月数,循环天数
Calendar中的方法:
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2012, Calendar.FEBRUARY, 23);
//求该日期月份的实际最大天数
int a = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//求月份中天数最少的最大值(即月份中最少的天数<该方法跟实际日期无关>)
int b = calendar.getLeastMaximum(Calendar.DAY_OF_MONTH);
//求月份中天数的最大值(该方法跟实际日期无关)
int c = calendar.getMaximum(Calendar.DAY_OF_MONTH);
System.out.println(calendar.getTime());// Thu Feb 23 14:53:48 CST 2012
System.out.println(a);// 29
System.out.println(b);// 28
System.out.println(c);// 31
}