content: package org.android.share.utils.time;
  
  import java.text.ParseException;
  import java.text.SimpleDateFormat;
  import java.util.Calendar;
  import java.util.Date;
  
  /**
   * 日期操作工具类.
   *
   * @author shimiso
   *         http://blog.csdn.net/xuduzhoud/article/details/27526177
   */
  
  public class DateUtil {
  
      private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
  
      public static Date str2Date(String str) {
          return str2Date(str, null);
      }
  
      /**
       * string -> date
       */
      public static Date str2Date(String str, String format) {
          if (str == null || str.length() == 0) {
              return null;
          }
          if (format == null || format.length() == 0) {
              format = FORMAT;
          }
          Date date = null;
          try {
              SimpleDateFormat sdf = new SimpleDateFormat(format);
              date = sdf.parse(str);
  
          } catch (Exception e) {
              e.printStackTrace();
          }
          return date;
  
      }
  
      public static Calendar str2Calendar(String str) {
          return str2Calendar(str, null);
  
      }
  
      public static Calendar str2Calendar(String str, String format) {
  
          Date date = str2Date(str, format);
          if (date == null) {
              return null;
          }
          Calendar c = Calendar.getInstance();
          c.setTime(date);
  
          return c;
  
      }
  
      public static String date2Str(Calendar c) {// yyyy-MM-dd HH:mm:ss
          return date2Str(c, null);
      }
  
      public static String date2Str(Calendar c, String format) {
          if (c == null) {
              return null;
          }
          return date2Str(c.getTime(), format);
      }
  
      public static String date2Str(Date d) {// yyyy-MM-dd HH:mm:ss
          return date2Str(d, null);
      }
  
      public static String date2Str(Date d, String format) {// yyyy-MM-dd HH:mm:ss
          if (d == null) {
              return null;
          }
          if (format == null || format.length() == 0) {
              format = FORMAT;
          }
          SimpleDateFormat sdf = new SimpleDateFormat(format);
          String s = sdf.format(d);
          return s;
      }
  
      public static String getCurDateStr() {
          Calendar c = Calendar.getInstance();
          c.setTime(new Date());
          return c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-"
                  + c.get(Calendar.DAY_OF_MONTH) + "-"
                  + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE)
                  + ":" + c.get(Calendar.SECOND);
      }
  
      /**
       * 获得当前日期的字符串格式
       */
      public static String getCurDateStr(String format) {
          Calendar c = Calendar.getInstance();
          return date2Str(c, format);
      }
  
      /**
       * 格式到秒
       *
       * @return time -> yyyy-MM-dd-HH-mm-ss
       */
      public static String getMillon(long time) {
  
          return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(time);
  
      }
  
      /**
       * 格式到天
       *
       * @return time -> yyyy-MM-dd
       */
      public static String getDay(long time) {
  
          return new SimpleDateFormat("yyyy-MM-dd").format(time);
  
      }
  
      /**
       * 格式到毫秒
       *
       * @return time -> yyyy-MM-dd-HH-mm-ss-SSS
       */
      public static String getSMillon(long time) {
  
          return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS").format(time);
  
      }
  
  
      /**
       * 输入的是String，格式诸如20120102，实现加一天的功能，返回的格式为String，诸如20120103
       */
      public static String stringDatePlus(String row) throws ParseException {
          String year = row.substring(0, 4);
          String month = row.substring(4, 6);
          String day = row.substring(6);
          String date1 = year + "-" + month + "-" + day;
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
          Date startDate = sdf.parse(date1);
          Calendar cd = Calendar.getInstance();
          cd.setTime(startDate);
          cd.add(Calendar.DATE, 1);
          String dateStr = sdf.format(cd.getTime());
          String year1 = dateStr.substring(0, 4);
          String month1 = dateStr.substring(5, 7);
          String day1 = dateStr.substring(8);
          return year1 + month1 + day1;
      }
  
      /**
       * 输入的是String，格式诸如20120102，实现减一天的功能，返回的格式为String，诸如20120101
       */
      public static String stringDateDecrease(String row) throws ParseException {
          String year = row.substring(0, 4);
          String month = row.substring(4, 6);
          String day = row.substring(6);
          String date1 = year + "-" + month + "-" + day;
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
          Date startDate = sdf.parse(date1);
          Calendar cd = Calendar.getInstance();
          cd.setTime(startDate);
          cd.add(Calendar.DATE, -1);
          String dateStr = sdf.format(cd.getTime());
          String year1 = dateStr.substring(0, 4);
          String month1 = dateStr.substring(5, 7);
          String day1 = dateStr.substring(8);
          return year1 + month1 + day1;
      }
  
      /**
       * 输入的格式为String，诸如20120101，返回的格式为String，诸如2012-01-01
       */
      public static String stringDateChange(String date) {
          if (date.length() == "20120101".length()) {
              String year = date.substring(0, 4);
              String month = date.substring(4, 6);
              String day = date.substring(6);
              return year + "-" + month + "-" + day;
          } else {
              return date;
          }
  
  
      }
  
      /**
       * 日期向后推一天
       *
       * @param date 格式：20120101
       * @return 20120102
       */
      public static String tonextday(String date) {
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month - 1, day + 1);
          Date newdate = calendar.getTime();
          SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
          String da = format.format(newdate);
          return da;
      }
  
      /**
       * 获取当前日期上一周的开始日期 （周日）
       */
      public static String previousWeekByDate(String date) {
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month - 1, day);
          Date newdate = calendar.getTime();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          Calendar cal = Calendar.getInstance();
          cal.setTime(newdate);
          int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          if (1 == dayWeek) {
              cal.add(Calendar.DAY_OF_MONTH, -1);
          }
          cal.setFirstDayOfWeek(Calendar.SUNDAY);//设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
          int s = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - s);//根据日历的规则，给当前日期减往星期几与一个星期第一天的差值 
          cal.add(Calendar.WEEK_OF_YEAR, -1);
          String imptimeBegin = sdf.format(cal.getTime());
  //      System.out.println("所在周星期日的日期："+imptimeBegin);
          return imptimeBegin;
      }
  
  
      /**
       * 获取当前日期上一周的结束日期 （周六）
       */
      public static String previousWeekEndDayByDate(String date) {
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month - 1, day);
          Date newdate = calendar.getTime();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          Calendar cal = Calendar.getInstance();
          cal.setTime(newdate);
          int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          if (1 == dayWeek) {
              cal.add(Calendar.DAY_OF_MONTH, -1);
          }
          cal.setFirstDayOfWeek(Calendar.SUNDAY);//设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
          int s = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          cal.add(Calendar.DATE, cal.getFirstDayOfWeek() + (6 - s));
          cal.add(Calendar.WEEK_OF_YEAR, -1);
          String imptimeBegin = sdf.format(cal.getTime());
  //      System.out.println("星期六的日期："+imptimeBegin);
          return imptimeBegin;
      }
  
  
      /**
       * 获取当前日期当前一周的开始日期 （周日）
       */
      public static String getCurrentWeekFirstDayByDate(String date) {
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month - 1, day);
          Date newdate = calendar.getTime();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          Calendar cal = Calendar.getInstance();
          cal.setTime(newdate);
          int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          if (1 == dayWeek) {
              cal.add(Calendar.DAY_OF_MONTH, -1);
          }
          cal.setFirstDayOfWeek(Calendar.SUNDAY);//设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
          int s = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - s);//根据日历的规则，给当前日期减往星期几与一个星期第一天的差值 
  
          String imptimeBegin = sdf.format(cal.getTime());
          //  System.out.println("所在周星期日的日期："+imptimeBegin);
          return imptimeBegin;
      }
  
      /**
       * 获取当前日期当前一周的结束日期 （周六）
       */
      public static String getCurrentWeekEndDayByDate(String date) {
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month - 1, day);
          Date newdate = calendar.getTime();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          Calendar cal = Calendar.getInstance();
          cal.setTime(newdate);
          int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          if (1 == dayWeek) {
              cal.add(Calendar.DAY_OF_MONTH, -1);
          }
          cal.setFirstDayOfWeek(Calendar.SUNDAY);//设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
          int s = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天
          cal.add(Calendar.DATE, cal.getFirstDayOfWeek() + (6 - s));
  
          String imptimeBegin = sdf.format(cal.getTime());
          return imptimeBegin;
      }
  
  
      /**
       * 返回上一个月的第一天
       *
       * @return 20120201
       */
      public static String previousMonthByDate(String date) {
          // TODO Auto-generated method stub
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month - 2, 1);
          Date newdate = calendar.getTime();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          Calendar cal = Calendar.getInstance();
          cal.setTime(newdate);
          String imptimeBegin = sdf.format(cal.getTime());
  //      System.out.println(imptimeBegin);
          return imptimeBegin;
      }
  
      /**
       * 返回下一个月的第一天
       *
       * @return 20120401
       */
      public static String nextMonthByDate(String date) {
          // TODO Auto-generated method stub
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month, 1);
          Date newdate = calendar.getTime();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          Calendar cal = Calendar.getInstance();
          cal.setTime(newdate);
          String imptimeBegin = sdf.format(cal.getTime());
  //      System.out.println(imptimeBegin);
          return imptimeBegin;
      }
  
      /**
       * 返回当前月的第一天
       *
       * @return 20120101
       */
      public static String getCurrentMonthFirstDayByDate(String date) {
          int year = Integer.parseInt(date.substring(0, 4));
          int month = Integer.parseInt(date.substring(4, 6));
          int day = Integer.parseInt(date.substring(6));
          Calendar calendar = Calendar.getInstance();
          calendar.set(year, month - 1, 1);
          Date newdate = calendar.getTime();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          Calendar cal = Calendar.getInstance();
          cal.setTime(newdate);
          String imptimeBegin = sdf.format(cal.getTime());
          return imptimeBegin;
      }
  
  }
  