转载地址:http://www.open-open.com/lib/view/open1414743866872.html
写的非常详细,包括:
1.如何设置值;
2.如何获取值,最大值,最小值(一个月中的最后一天是多少号);
3.Calendar的各个范围介绍,比如DAY_OF_MONTH,DAY_OF_YEAR,DAY_OF_WEEK等等;
4.使用Calendar的roll函数和add函数计算;
说明:Calendar的roll函数和add函数的区别?
比如当前日期是2016-08-18,获取Calendar cal = Calendar.getInstance();实例
1.cal.add(Calendar.MONTH,5); //运算结果为2017-01-18
2.cal.roll(Calendar.MONTH,5); //运算结果为2016-01-18
两者的区别在于:roll方法只在指定的Calendar范围(例子中指定的是月份)里面循环滚动,不会进位。而add方法会不断相加,产生进位。正如本例中,当前月份为8月份,再过5个月,那么年份加1,而roll函数不影响其他的范围,只在月份范围变化。
详细代码,如下所示:
package SecondInterview;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class UseCalendar {
public static void main(String[] args) {
//详细使用Calendar抽象类
Calendar cal = Calendar.getInstance();
//Part1:通过Calendar常量(field)获取值
int xingqi = cal.get(Calendar.DAY_OF_WEEK);//星期几:从星期天(返回1)开始计算,如果今天星期二,那么返回3
System.out.println("星期几:"+xingqi);
int day_of_year = cal.get(Calendar.DAY_OF_YEAR);//一年中第几天
System.out.println("一年中的第几天:"+ day_of_year);
int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);//一个月的第几周
System.out.println("一个月的第几周:"+week_of_month);
int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);//一年中的第几周
System.out.println("一年中的第几周:"+week_of_year);
int year = cal.get(Calendar.YEAR);//年
System.out.println("年:"+year);
int month = cal.get(Calendar.MONTH);//月,说明月份获取需要 +1,那么,赋值时需要 -1
System.out.println("月:"+(month+1));
int day_of_month = cal.get(Calendar.DATE);//一个月中的第几天 0-31
int day_of_month1 = cal.get(Calendar.DAY_OF_MONTH);//一个月中的第几天 0-31
System.out.println("日:"+day_of_month);
int hour = cal.get(Calendar.HOUR);//时,12小时制
System.out.println("时(12小时制):"+hour);
int hour1 = cal.get(Calendar.HOUR_OF_DAY);//时,24小时制,一般使用这个属性赋值
System.out.println("时(24小时制):"+hour1);
int minute = cal.get(Calendar.MINUTE);//分
System.out.println("分:"+minute);
int second = cal.get(Calendar.SECOND);//秒
System.out.println("秒:"+second);
int milliSecond = cal.get(Calendar.MILLISECOND);//取得精确的毫秒数
System.out.println("毫秒:"+milliSecond);
//Part1 end
//Part2:使用Calendar的roll和add函数计算
SimpleDateFormat simpleFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//当前时间再过2个小时后的时刻
cal.add(Calendar.HOUR_OF_DAY, 2);
System.out.println("当前时间再过2个小时后的时刻:"+ simpleFormate.format(cal.getTime()) );
//当前时间再过5天后的时刻
cal.add(Calendar.DAY_OF_MONTH, 5);
System.out.println("当前时间再过5天后的时刻:"+ simpleFormate.format(cal.getTime()) );
//*使用roll函数,求当前时间再过31天后的时刻
//说明:一般不使用,原因是该方法只在一个月里面循环计算,其大小不会超过该月最值。roll滚动,在一个月份里滚动,不超过最值。
cal.roll(Calendar.DAY_OF_MONTH, 32);
System.out.println("使用roll函数,当前时间再过32天后的时刻:"+ simpleFormate.format(cal.getTime()) );
//当前时间再过6个月后的时刻
cal.add(Calendar.MONTH, 6);
System.out.println("当前时间再过6个月后的时刻:"+ simpleFormate.format(cal.getTime()) );
//使用roll函数
cal.roll(Calendar.MONTH, 12);
System.out.println("使用roll,当前时间再过12个月后的时刻:"+ simpleFormate.format(cal.getTime()) );
//使用roll函数
cal.roll(Calendar.MONTH, true);
System.out.println("使用roll,当前时间再过1个月后的时刻:"+ simpleFormate.format(cal.getTime()) );
//当前时间再过3年后的时刻
cal.add(Calendar.YEAR, 3);
System.out.println("当前时间再过3年后的时刻:"+ simpleFormate.format(cal.getTime()) );
//Part2 end
//Part3 使用Calendar获取值
//1.获取当天的起止时间
//2.获取当周的起止时间
//3.获取当月的起止时间 1,2,3显示格式均为"yyyy-MM-dd HH:mm:ss"
//一天中的开始时刻
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
String start1 = simpleFormate.format(cal.getTime());
//一天中的结束时刻
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
String end1 = simpleFormate.format(cal.getTime());
System.out.println("当天的起止时间:" + start1 + "~" + end1);
//一周中的开始时间
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
String start2 = simpleFormate.format(cal.getTime());
//一周中的结束时间
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
String end2 = simpleFormate.format(cal.getTime());
System.out.println("当周的起止时间:" + start2 + "~" + end2);
//一月中的开始时间
cal.set(Calendar.DAY_OF_MONTH, 1);//从1号开始
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
String start3 = simpleFormate.format(cal.getTime());
//一月中的结束时间
int maxMonthDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, maxMonthDay);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
String end3 = simpleFormate.format(cal.getTime());
System.out.println("当月的起止时间:" + start3 + "~" + end3);
}
}