2011년 6월 30일 목요일

날짜함수-3


/**
   * 날짜에 - 를 넣는다.
   * @param yyyyMMdd 형식
   * @return yyyy-MM-dd 형식의 날짜가 담긴 날짜
   */
  public static String addDash(String dash){
   String dash_temp = "";
   if ((dash == null) || (dash.equals(""))) {
    return "";
   } else {
    dash_temp = replace(dash, "-", "");
    return dash_temp.substring(0,4) + "-" + dash_temp.substring(4,6) + "-" + dash_temp.substring(6,8);
   }
  }
 
  /**
   * 두날짜 사이의 월수를 리턴
   * @param fromDate yyyyMMdd 형식의 시작일
   * @param toDate yyyyMMdd 형식의 종료일
   * @return 두날짜 사이의 일수
   */
  public static int getDiffMonthCount(String fromDate, String toDate) {
   SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
   try {
    return (int) ((sdf.parse(toDate).getTime() - sdf.parse(fromDate)
      .getTime()) / 1000 / 60 / 60 / 24);
   } catch (Exception e) {
    return 0;
   }
  }
  /**
   * 시작일부터 종료일까지 사이의 날짜를 배열에 담아 리턴
   * ( 시작일과 종료일을 모두 포함한다 )
   * @param fromDate yyyyMMdd 혹은 yyyyMM 혹은 yyyy 형식의 시작일
   * @param toDate yyyyMMdd 혹은 yyyyMM 혹은 yyyy 형식의 종료일
   * @param dateFlag 년/월/일 구분
   * @return yyyyMMdd 혹은 yyyyMM 혹은 yyyy 형식의 날짜가 담긴 배열
   */
  public static String[] getDiffDays(String fromDate, String toDate, String dateFlag) {
  
   String startDate = fromDate;
   String endDate = toDate;
    // 데이터 저장
    List list = new ArrayList();
  
   if (dateFlag.equals("Y")) {
     for (int i = Integer.parseInt(startDate); i <= Integer.parseInt(endDate); i++) {
      list.add( Integer.toString(i) );
     }
   } else {
    if (dateFlag.equals("M")) {
     startDate = startDate + "01";
     endDate = endDate + "01";
    }
    System.out.println(  "startDate : " + startDate );
    System.out.println( "endDate : " + endDate );
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    Calendar cal = Calendar.getInstance();
    try {
      cal.setTime(sdf.parse(startDate));
    } catch (Exception e) {
    }

    int count = getDiffDayCount(startDate, endDate);
    // 시작일부터
    cal.add(Calendar.DATE, -1);
    
    String monthDate  = "";
    String monthDate2  = "";
    for (int i = 0; i <= count; i++) {
      cal.add(Calendar.DATE, 1);
       if (dateFlag.equals("D")) {
        list.add(sdf.format(cal.getTime()));
       } else if (dateFlag.equals("M")) {
        monthDate  = sdf.format(cal.getTime()).substring(0, 6);
     
        if (i == 0) {
         list.add(monthDate);
         monthDate2 = monthDate;
        } else {
          if (!monthDate.equals(monthDate2)) {
           list.add(monthDate);
           monthDate2 = monthDate;
          }
         }
        }
      }   
   }
  
   String[] result = new String[list.size()];
   list.toArray(result);
   return result;
  }
 
  /**
  * Method replace 문자열에서 일정 부분을 다른 부분으로 대치하는 메소드
     * @param mainString
  * @param oldString
  * @param newString
  * @return String
  */
 public static String replace(String mainString, String oldString, String newString) {
  if (mainString == null) {
     return null;
  }
  if (oldString == null || oldString.length() == 0) {
     return mainString;
  }
  if (newString == null) {
     newString = "";
  }
  int i = mainString.lastIndexOf(oldString);
  if (i < 0)
     return mainString;
  StringBuffer mainSb = new StringBuffer(mainString);
  while (i >= 0) {
     mainSb.replace(i, (i + oldString.length()), newString);
     i = mainString.lastIndexOf(oldString, i - 1);
  }
  return mainSb.toString();
 }

댓글 없음:

댓글 쓰기