Calendar 最全用法集锦

来源:互联网 发布:达内php培训课程 编辑:程序博客网 时间:2024/06/05 23:40
    import java.util.Calendar;      import java.util.Date;      import java.util.GregorianCalendar;            public class TestCalendar      {          public static void main(String[] args) throws Exception          {              Calendar cal = Calendar.getInstance();              java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(                      "yyyy-MM-dd");              System.out.println("今天的日期是:" + format.format(cal.getTime()));              // 得到前2天日期              cal.add(Calendar.DATE, -Integer.parseInt("2"));              System.out.println("前天的日期是:" + format.format(cal.getTime()));              // 计算某一月份的最大天数              Calendar time = Calendar.getInstance();              // 在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间              time.clear();              time.set(Calendar.YEAR, 2011);              time.set(Calendar.MONTH, 7);// 注意,Calendar对象默认一月为0              int day = time.getActualMaximum(Calendar.DAY_OF_MONTH);// 本月份的天数              System.out.println("2011年八月的天数为:" + day);              // Calendar转化为Date              cal = Calendar.getInstance();              Date date = cal.getTime();              // Date转化为Calendar              date = new Date();              cal = Calendar.getInstance();              cal.setTime(date);              // 计算某一天是一年中的第几星期              cal = Calendar.getInstance();              cal.clear();              cal.set(Calendar.YEAR, 2006);              cal.set(Calendar.MONTH, 8);              cal.set(Calendar.DAY_OF_MONTH, 3);              int weekno = cal.get(Calendar.WEEK_OF_YEAR);              // 计算一年中的第几星期是几号              cal = Calendar.getInstance();              cal.clear();              cal.set(Calendar.YEAR, 2011);              cal.set(Calendar.WEEK_OF_YEAR, 2);              cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);              // 2011年第一个星期的星期一是              System.out.println("2011年第一个星期的星期一是:" + format.format(cal.getTime()));              // add()方法              cal.set(Calendar.YEAR, 2006);              cal.set(Calendar.MONTH, 8);              cal.set(Calendar.DAY_OF_MONTH, 3);              cal.add(Calendar.DATE, -4);              date = cal.getTime();              System.out.println(format.format(date));              cal.add(Calendar.DATE, 4);              date = cal.getTime();              System.out.println(format.format(date));              // roll方法:roll()方法在本月内循环,一般使用add()方法;              cal.set(Calendar.YEAR, 2006);              cal.set(Calendar.MONTH, 8);              cal.set(Calendar.DAY_OF_MONTH, 3);              cal.roll(Calendar.DATE, -4);              date = cal.getTime();              System.out.println(format.format(date));              cal.roll(Calendar.DATE, 4);              date = cal.getTime();              System.out.println(format.format(date));              // 从 Calendar.getInstance() 中所获得的实例就是一个 "GreogrianCalendar" 对象              Calendar calendar = Calendar.getInstance();              if (calendar instanceof GregorianCalendar)                  System.out.println("It is an instance of GregorianCalendar");              cal.setTime(new Date());              Calendar cal1 = Calendar.getInstance();              cal1.add(cal1.DATE, 4);              int num = getIntervalDays(cal, cal1);              System.out.println("相差的天数为:" + num + "天");          }                // 计算两个任意时间中间的间隔天数          public static int getIntervalDays(Calendar startday, Calendar endday)          {              // 确保startday在endday之前              if (startday.after(endday))              {                  Calendar cal = startday;                  startday = endday;                  endday = cal;              }              // 分别得到两个时间的毫秒数              long sl = startday.getTimeInMillis();              long el = endday.getTimeInMillis();              long ei = el - sl;              // 根据毫秒数计算间隔天数              return (int) (ei / (1000 * 60 * 60 * 24));          }                // 传进Date对象          /** */          /**          * 计算两个时间之间相隔天数          *           * @param startday          *            开始时间          * @param endday          *            结束时间          * @return          */          public static int getIntervalDays(Date startday, Date endday)          {              // 确保startday在endday之前              if (startday.after(endday))              {                  Date cal = startday;                  startday = endday;                  endday = cal;              }              // 分别得到两个时间的毫秒数              long sl = startday.getTime();              long el = endday.getTime();              long ei = el - sl;              // 根据毫秒数计算间隔天数              return (int) (ei / (1000 * 60 * 60 * 24));          }          /*         注:以上方法是完全按时间计算,有时并不能令人满意,如:         startday=”2006-10-11 20:00:00″         endday=”2006-10-12 8:00:00″         计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现:         在传参之前,先设定endday的时间,如:         Java代码         endday.set(Calendar.HOUR_OF_DAY, 23);          endday.set(Calendar.MINUTE, 59);          endday.set(Calendar.SECOND, 59);          endday.set(Calendar.MILLISECOND, 59);          这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方法麻烦,可以参考以下方法:          */          // 改进精确计算相隔天数的方法          public static int getDaysBetween(Calendar d1, Calendar d2)          {              if (d1.after(d2))              { // swap dates so that d1 is start and d2 is end                  java.util.Calendar swap = d1;                  d1 = d2;                  d2 = swap;              }              int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);              int y2 = d2.get(Calendar.YEAR);              if (d1.get(Calendar.YEAR) != y2)              {                  d1 = (Calendar) d1.clone();                  do                  {                      days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);// 得到当年的实际天数                      d1.add(Calendar.YEAR, 1);                  } while (d1.get(Calendar.YEAR) != y2);              }              return days;          }      }