Java旧版本的Calendar类使用小结
在Java8以前,Java原生类库对于日期时间的处理基本上就是使用Date 和 Calendar 类及其衍生类;
java.util.Calendar 是一个抽象基类,可以提取详细的日历信息,如年月日,小时分钟秒等,
Calendar的数值时距历元(即格林威治标准时间 1970年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。;
Calendar支持公历类 java.util.GregorianCalendar;
java.util.Calendar | |
+Calendar() | ○创建一个默认的日历 |
java.util.GregorianCalendar | |
+GregorianCalendar() | ○构造当前时间的公历对象 |
Calendar类的域常量 | |
YEAR | 日历的年份 1+ |
2、基本使用
获取年份等:
Calendar calendar= new GregorianCalendar();
int year =calendar.get(Calendar.YEAR);
为某个特定的日历域增加或减少指定的量:
calendar.add(Calendar.DAY_OF_MONTH,5);
获取某个月的天数
Calendarcalendar = new GregorianCalendar();
calendar.set(Calendar.MONTH,5);
calendar.getActualMaxium(Calendar.MONTH_OF_DAY);
Calendar类常见的应用
1、Calendar和Date之间的相互转换:
①Calendar->Date
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
②Date->Calendar
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
2、创建指定年月日的Date对象:
Date createSpecifyDate(int year,int month,int date[,int hour,int minute,int seconds]){
Calendar cal = Calendar.getInstance();
Calendar.set(year,month,date[,hour,minute,seconds]);
Date date = cal.getTime();
return date;
}
3、获取指定月份的最大天数
int getMaxDayOfMonth(int year,int month){
Calendar cal = new GregorianCalendar(year,month,1);
return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
4、获取Calendar的当前年 每个单位常量的总值
Calendar cal = Calendar.getInstance();
int total_months = cal.get(Calendar.MONTH);
int total_weeks = cal.get(Calendar.WEEK_OF_YEAR);
int total_days = cal.get(Calendar.DAY_OF_YEAR);
int total_hours = cal.get(Calendar.DAY_OF_YEAR) * 24;
int total_minutes = cal.get(Calendar.DAY_OF_YEAR) * 24 * 60 ;
int total_seconds = cal.get(Calendar.DAY_OF_YEAR) * 24 * 60 * 60;
5、计算两个Calendar时间量之间的时间差
void duration(Calendar cal1,Calendar cal2){
long durationMills = cal2.getTimeInMillis() - cal1.getTimeInMilis();
//return total_second
int duration_seconds = (int)durationMills / 1000;
//return total_minute
int total_minutes = (int)durationMills / (1000 * 60);
//retrun total_hour
int total_hours = (int)durationMillis /(1000 * 60 *60);
//return total_day
int total_days = (int)durationMillis /(1000 * 60 * 60 * 24);
//return total_week
int total_weeks = (int)durationMillis/(1000 *60 * 60 *24 *7);
//return total_month
Calendar calTemp = Calendar.getInstance();
calTemp.setTimeInMillis(durationMillis);
int total_months = get(Calendar.WEEK_OF_YEAR);
//return total_year
int total_years = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR);
}
两个Date对象计算时间差,可以将Date装载入Calendar对象中,在进行运算;
指定数值的两组时间值计算时间差,可p以将这两组时间值装载如Calendar对象中,在进行运算;
也可以考虑使用Java8的Duration和Period类