빠듯..
2007-02-20 16:06:35
4
4267

날자와 날자 사이에 있는 모든 날자(?) 구하는 방법..?


2006년 12월 01에서 2007년 01월 10일 사이의 모든

날자를 구하는 함수나 좋은방법 아시는분...

자바나 오라클안에서 아래 결과물처럼 얻을수 있는 방법이 있나요?

부탁드립니다. (__;;)

 

결과 :  2006-12-01,2006-12-02,2006-12-03,2006-12-04,2006-12-05,

2006-12-05,  ~~~~  2007-01-08,2007-01-09,2007-01-10

0
0
  • 답변 4

  • 미국에서
    2007-02-20 16:36:10
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.ArrayList;

    public class DateUtil {
    public static void main(String[] args) {
    DateUtil du = new DateUtil();

    String[] days = du.getDiffDays("20070220", "20070302");

    for( int i = 0; i < days.length; i++ ) {
    System.out.println( days[i] );
    }
    }

    /**
    * 시작일부터 종료일까지 사이의 날짜를 배열에 담아 리턴 ( 시작일과 종료일을 모두 포함한다 )
    *
    * @param fromDate
    * yyyyMMdd 형식의 시작일
    * @param toDate
    * yyyyMMdd 형식의 종료일
    * @return yyyyMMdd 형식의 날짜가 담긴 배열
    */
    public static String[] getDiffDays(String fromDate, String toDate) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    Calendar cal = Calendar.getInstance();

    try {
    cal.setTime(sdf.parse(fromDate));
    } catch (Exception e) {
    }

    int count = getDiffDayCount(fromDate, toDate);

    // 시작일부터
    cal.add(Calendar.DATE, -1);

    // 데이터 저장
    ArrayList<String> list = new ArrayList<String>();

    for (int i = 0; i <= count; i++) {
    cal.add(Calendar.DATE, 1);

    list.add(sdf.format(cal.getTime()));
    }

    String[] result = new String[list.size()];

    list.toArray(result);

    return result;
    }

    /**
    * 두날짜 사이의 일수를 리턴
    *
    * @param fromDate
    * yyyyMMdd 형식의 시작일
    * @param toDate
    * yyyyMMdd 형식의 종료일
    * @return 두날짜 사이의 일수
    */
    public static int getDiffDayCount(String fromDate, String toDate) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    try {
    return (int) ((sdf.parse(toDate).getTime() - sdf.parse(fromDate)
    .getTime()) / 1000 / 60 / 60 / 24);
    } catch (Exception e) {
    return 0;
    }
    }
    }

    살짝만 바꾸신다면야 ^^
    더 괜찮은 알고리즘 있다면 추천 부탁드려요.
    0
  • 빠듯..
    2007-02-20 16:58:59
    꽁수에꽁수를 써서 좀 전에 해결하구 혹시나 하는 마음으로 들어왔는데.. 님께서 만드신게 더 깔끔하구 좋네요. 답변 진심으로 감사드립니다. 잘 사용하겠습니다. ^^
    0
  • .
    2007-02-21 10:41:09
    깔끔한&nbsp;소스&nbsp;고맙게&nbsp;사용하겠습니다.&nbsp;ㅎㅎ&nbsp;&nbsp;
    제가&nbsp;쓰는&nbsp;것보다&nbsp;깔끔해서&nbsp;//미국에서님&nbsp;소스쓰기로&nbsp;했사옵니다&nbsp;ㅋ&nbsp;아래&nbsp;소스는&nbsp;그냥..&nbsp;&nbsp;
    문자&nbsp;포멧쓸려구&nbsp;쬐끔&nbsp;바궜습니다.&nbsp;&nbsp;



    import&nbsp;java.text.SimpleDateFormat;&nbsp;&nbsp;
    import&nbsp;java.util.Calendar;&nbsp;&nbsp;
    import&nbsp;java.util.ArrayList;&nbsp;&nbsp;
    import&nbsp;java.util.Date;&nbsp;

    public&nbsp;class&nbsp;DateUtil&nbsp;{&nbsp;&nbsp;

    &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;days&nbsp;=&nbsp;null;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;days&nbsp;=&nbsp;DateUtil.getDiffDays(&nbsp;"20070220",&nbsp;"20070302"&nbsp;);&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;days.length;&nbsp;i++&nbsp;)&nbsp;{&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;days[i]&nbsp;);&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;

    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;days&nbsp;=&nbsp;DateUtil.getDiffDaysFormat(&nbsp;"2007-02-20",&nbsp;"2007-03-02",&nbsp;"yyyy-MM-dd"&nbsp;);&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;days.length;&nbsp;i++&nbsp;)&nbsp;{&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;days[i]&nbsp;);&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

    &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String[]&nbsp;getDiffDays(&nbsp;String&nbsp;from,&nbsp;String&nbsp;to&nbsp;)&nbsp;{&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;getDiffDaysFormat(&nbsp;from,&nbsp;to,&nbsp;"yyyyMMdd"&nbsp;);&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

    &nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;시작일부터&nbsp;종료일까지&nbsp;사이의&nbsp;날짜를&nbsp;배열에&nbsp;담아&nbsp;리턴&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;시작일과&nbsp;종료일을&nbsp;모두&nbsp;포함한다.&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;from&nbsp;시작일&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;to&nbsp;&nbsp;&nbsp;종료일&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;fmt&nbsp;&nbsp;날짜&nbsp;문자&nbsp;포멧(예:&nbsp;yyyyMMdd,&nbsp;yy-yy-MMdd&nbsp;)&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fmt&nbsp;포멧의&nbsp;날짜가&nbsp;담긴&nbsp;문자열&nbsp;배열&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String[]&nbsp;getDiffDaysFormat(&nbsp;String&nbsp;from,&nbsp;String&nbsp;to,&nbsp;String&nbsp;fmt&nbsp;)&nbsp;{&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;sdf&nbsp;&nbsp;=&nbsp;new&nbsp;SimpleDateFormat(&nbsp;fmt&nbsp;);&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList<String>list&nbsp;=&nbsp;new&nbsp;ArrayList<String>();&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calendar&nbsp;cal&nbsp;=&nbsp;Calendar.getInstance();&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;fmdate&nbsp;&nbsp;=&nbsp;null;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;todate&nbsp;&nbsp;=&nbsp;null;&nbsp;

    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fmdate&nbsp;=&nbsp;sdf.parse(from);&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;todate&nbsp;=&nbsp;sdf.parse(to);&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal.setTime(fmdate);&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(&nbsp;Exception&nbsp;e&nbsp;)&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;

    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;fmdate.compareTo(todate)&nbsp;<=&nbsp;0&nbsp;)&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(sdf.format(fmdate));&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal.add(Calendar.DATE,&nbsp;1);&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fmdate&nbsp;=&nbsp;cal.getTime();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;

    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;result&nbsp;=&nbsp;new&nbsp;String[list.size()];&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.toArray(result);&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    }&nbsp;&nbsp;
    0
  • ora
    2007-02-21 17:16:14
    SELECT (TO_DATE ('20061201', 'YYYYMMDD') + LEVEL - 1) days
    FROM DUAL
    CONNECT BY (TO_DATE ('20061201', 'YYYYMMDD') + LEVEL - 1)
    <= TO_DATE('20070101', 'YYYYMMDD')
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.