Date 和 Calendar 转 String
借助 SimpleDateFormat 类的 format 方法,Calendar.getTime() 返回 Date,最终 Calendar 也是转化为 Date 后转 String。
1 2 3 4 5 6 7 8 9 10
   |  String format = new String("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
 
  String strDate = sdf.format(new Date());
  Calendar cal = Calendar.getInstance();
  String strCalendar = sdf.format(cal.getTime());
 
  | 
String 转 Date、Calendar
1 2 3 4 5 6 7 8 9 10
   | String strDate = "2015-04-04 00:33:00"; Date date = null; Calendar cal = Calendar.getInstance(); try {     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);     date = sdf.parse(strDate);     cal.setTime(date); } catch (Exception e) {     e.printStackTrace(); }
   | 
设置 Calendar 到某年某月某日
注意点:
- Month 要设为比实际小 1。
 - 除显式设置的几个字段外,其它字段之前的值不变;如果不是期待的,可以先调用 clear() 清除。
 
1 2 3
   | Calendar cal = Calendar.getInstance();
  cal.set(2015, 3 - 1, 1);
   | 
复制 Calendar
1
   | Calendar calDst = (Calendar)calSrc.clone();
   | 
求本周、上周、下周的起始时间
做了一个工具类来处理此事(注意:这里计算的一周是从周一到周日,如果要算周天到周六,把获取本周一时括号里的 +1 去掉):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
   | static class DateCalcUtil {     public static final int GET_PREVIOUS_MONDAY = 0;     public static final int GET_PREVIOUS_SUNDAY = 1;     public static final int GET_THIS_MONDAY = 2;     public static final int GET_THIS_SUNDAY = 3;     public static final int GET_NEXT_MONDAY = 4;     public static final int GET_NEXT_SUNDAY = 5;
      public static Calendar calc(Calendar base, int calcType) {                  int min = base.getActualMinimum(Calendar.DAY_OF_WEEK);                  int current = base.get(Calendar.DAY_OF_WEEK);         Calendar calendar = (Calendar)base.clone();
                   int nCount = (current == min) ? -6 : (min - current + 1);
          switch (calcType) {             case GET_PREVIOUS_MONDAY:                 nCount -= 7;                 break;
              case GET_PREVIOUS_SUNDAY:                 nCount -= 1;                 break;
              case GET_THIS_MONDAY:                 break;
              case GET_THIS_SUNDAY:                 nCount += 6;                 break;
              case GET_NEXT_MONDAY:                 nCount += 7;                 break;
              case GET_NEXT_SUNDAY:                 nCount += 13;                 break;
              default:                 break;         }
          calendar.add(Calendar.DAY_OF_WEEK, nCount);
          return calendar;     } }
  | 
使用示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   |  Calendar base = Calendar.getInstance();
 
  Calendar thisMonday = DateCalcUtil.calc(base, DateCalcUtil.GET_THIS_MONDAY); Calendar thisSunday = DateCalcUtil.calc(base, DateCalcUtil.GET_THIS_SUNDAY);
 
  Calendar nextMonday = DateCalcUtil.calc(base, DateCalcUtil.GET_NEXT_MONDAY); Calendar nextSunday = DateCalcUtil.calc(base, DateCalcUtil.GET_NEXT_SUNDAY);
 
  Calendar previousMonday = DateCalcUtil.calc(base, DateCalcUtil.GET_PREVIOUS_MONDAY); Calendar previousSunday = DateCalcUtil.calc(base, DateCalcUtil.GET_PREVIOUS_SUNDAY);
 
  | 
获取两个日期相差天数
注意点:
- getTimeInMillis 返回的是 0 时区时间,所以有可能把你的时间加减了几个小时,造成计算天数有误,这种方法必须考虑时区因素再运算。
 
1 2 3 4 5
   | long daysCount1 = (calendar1.getTimeInMillis() + calendar1.get(Calendar.ZONE_OFFSET))     / (24 * 3600 * 1000); long daysCount2 = (calendar2.getTimeInMillis() + calendar2.get(Calendar.ZONE_OFFSET))     / (24 * 3600 * 1000); long dayDiffer = daysCount1 - daysCount2;
   |