Java-Calendar
1 import java.util.Calendar; 2 /** 3 * 日历类 4 */ 5 public class TestCalendar { 6 public static void main(String[] args) { 7 /** 8 * java.util.Calendar 日历类 9 * 10 * 1.由于Calendar类是抽象类,且Calendar类的构造方法是protected的, 11 * 所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。 12 * 13 * 2.使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观, 14 * 所以直接输出Calendar类的对象意义不大。 15 */ 16 Calendar cal = Calendar.getInstance(); //返回当前日历对象 17 18 /** 19 * set方法的声明为:public final void set(int year,int month,int date) 20 * 21 * Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。 22 */ 23 cal.set(2016, 2, 23); 24 System.out.println(cal.getTime()); // 获取为日期Date类型:Wed Mar 23 12:19:30 CST 2016 25 26 /** 27 * 如果只设定某个字段: 28 * 29 * 例如日期的值,则可以使用如下set方法: 30 * public void set(int field,int value) 31 * 32 * 33 * 在该方法中,参数field代表要设置的字段的类型,常见类型如下: 34 * Calendar.YEAR---年份; 35 * Calendar.MONTH---月份; 36 * Calendar.DATE---日期; 37 * Calendar.DAY_OF_MONTH---日期,和Calendar.DATE字段完全相同; 38 * Calendar.HOUR---12小时制的小时数; 39 * Calendar.HOUR_OF_DAY---24小时制的小时数; 40 * Calendar.MINUTE---分钟; 41 * Calendar.SECOND---秒; 42 * Calendar.DAY_OF_WEEK---星期几。 43 * 44 * 在Calendar类中,周日是1,周一是2,周二是3,依次类推。周六为最后一天 45 * 46 * 后续的参数value代表设置成的值。 47 * 例如: 48 * c1.set(Calendar.DATE,10); 49 * 该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算, 50 * 例如星期几以及对应的相对时间数值等。 51 */ 52 cal.set(Calendar.DATE, 10); //修改日期为10号,修改之后cal对应的星期等都会重新计算 53 54 /** 55 * 获得Calendar类中的信息: 56 */ 57 int year =cal.get(cal.YEAR); //获取年份 58 int month = cal.get(cal.MONTH); //获取月份 59 int date = cal.get(cal.DATE); //获取日期 60 61 int date1 = cal.get(cal.DAY_OF_MONTH); //获取日期和cal.DATE一样 62 int day = cal.get(cal.DAY_OF_WEEK); //获取星期几 63 int day2 = cal.get(cal.DAY_OF_YEAR); //获取当前是一年中的第多少天 64 //某月中第几周,以月份天数为标准 65 int day3 = cal.get(cal.DAY_OF_WEEK_IN_MONTH);//按这个月1号算,1号起就是第1周,8号起就是第2周。 66 67 int hour = cal.get(cal.HOUR); //获取12小时制的小时数 68 int hour2 = cal.get(cal.HOUR_OF_DAY); //获取24小时制的小时数 69 70 int minute = cal.get(cal.MINUTE); //获取分钟 71 int second = cal.get(cal.SECOND); //获取秒 72 73 int week1 = cal.get(cal.WEEK_OF_YEAR); //一年中的第几周 74 int week2 = cal.get(cal.WEEK_OF_MONTH); //日历式的第几周 75 76 77 /** 78 * 如果需要指定一周的开始日期,则需要在指定开始日期之后再设置日期 79 * 默认一周的开始为周日,结束为周六 80 */ 81 cal.setFirstDayOfWeek(Calendar.MONDAY); //设置一周的第一天为MONDAY 82 83 84 /** 85 * 获取指定日期所在月最小日和最大日 最大日28天 29天 30天 31天 86 */ 87 Calendar calendar = Calendar.getInstance(); //返回当前日历对象 88 int minDay = calendar.getActualMinimum(Calendar.DATE); 89 int maxDay = calendar.getActualMaximum(Calendar.DATE); // 获取当月最大天数 90 System.out.println(minDay + "-" + maxDay); //1 - 31 91 92 /** 93 * 其他方法说明: 94 * (1)add方法: public abstract void add(int field,int amount) 95 * 该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少是amount的值为负。 96 */ 97 98 /** 99 * 例如计算当前时间100天以后的日期,代码如下: 100 * 这里add方法是指在c3对象的Calendar.DATE,也就是日期字段上增加100, 101 * 类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的 102 */ 103 Calendar c3 = Calendar.getInstance(); 104 c3.add(Calendar.DATE,100); 105 int year1 = c3.get(Calendar.YEAR); 106 int month1 = c3.get(Calendar.MONTH); 107 int d1 = c3.get(Calendar.DATE); 108 System.out.println(year1 + "年" + month1 + "月" + d1 + "日"); 109 110 /** 111 * (2)after方法: public boolean after(Object when) 112 * 该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。 113 * 114 * (3)before方法: 该方法是判断当前日期对象是否位于另外一个日期对象之前。 115 */ 116 Calendar c4 = Calendar.getInstance(); 117 c4.set(2016,8-1,28); 118 119 Calendar c5 = Calendar.getInstance(); 120 c5.set(2016,10-1,1); 121 boolean b = c5.after(c4); //判断两个日期前后 122 System.out.println(b); 123 124 /** 125 * Calendar对象和相对时间之间的转换: 126 * 127 * 1.在转换时,使用Calendar类中的getTimeInMillis方法可以将Calendar对象转换为相对时间。 128 * 129 * 2.在将相对时间转换为Calendar对象时,首先创建一个Calendar对象, 130 * 然后再使用Calendar类的setTimeInMillis方法设置时间即可。 131 */ 132 Calendar c6 = Calendar.getInstance(); 133 long t1 = c6.getTimeInMillis(); //将Calendar对象转换为相对时间 134 135 Calendar c9 = Calendar.getInstance(); 136 long t = 1252785271098L; 137 c9.setTimeInMillis(t); //将相对时间转换成Calendar对象 138 139 /** 140 * 计算2016年8月20号和2016年8月29号之间相差的天数。 141 * 142 * 143 * 原理: 144 * 首先代表两个特定的时间点,这里使用Calendar的对象进行代表,然后将两个时间点转换为对应的相对时间, 145 * 求两个时间点相对时间的差值,然后除以一天的毫秒数(24小时*60分钟*60秒*1000毫秒)即可获得对应的天数 146 */ 147 148 Calendar c1 = Calendar.getInstance(); 149 c1.set(2016, 8-1,20); 150 long time1 = c1.getTimeInMillis(); 151 152 Calendar c2 = Calendar.getInstance(); 153 c2.set(2016, 8-1,29); 154 long time2 = c1.getTimeInMillis(); 155 156 //计算天数 157 long days = (time2-time1)/(24*60*60*1000); 158 } 159 }