본문 바로가기

Programming/JAVA/JSP

날짜 비교 관련 함수 모음

출처 : http://www.okjsp.pe.kr/seq/106272

첨부 파일 참고~


초보자
2007-11-02 17:50:42.0
날자비교하는 소스 질문이요

 

날자를 비교하는 함수를 만들어 사용중입니다.

잘 돌아가던건데 왜 결과가 다르게 나옵니다.

 

시작날자와 종료날자를 파라미터로 넘겨서 오늘날자를 기준으로 두날자 사이에

 

들어오는지 체크하는 함수인데 계속 false로 나오네요.

  • 사용하던 것 중 날짜비교와 관련한 일부를 올려드립니다.
    혹 몰라서 다시 테스트를 해보았으니 이상 없을겁니다.
    ---------------------------------------------------
    /*
    * @(#)ConcernOfDateTest.java
    * neoburi@nowonplay.com, All rights reserved.
    * 2007. 11. 03 - First implementation.
    * contact : neoburi@nowonplay.com
    */
    package test.util.date;

    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    /**
    * 날짜와 관련 테스트를 수행하는 클래스이다.
    *
    * @author neoburi@nowonplay.com, 2007
    * @version 1.0 Since 2007. 11. 03
    */
    public class ConcernOfDateTest {
    private final String DATE_FORMT = "yyyy-MM-dd";
    private final String DATETIME_FORMT = "yyyy-MM-dd HH:mm:ss";
    /**
    * Test main method
    * @param args
    */
    public static void main(String[] args) throws Exception{
    new ConcernOfDateTest().doNext();
    }
    /**
    * @throws Exception
    */
    void doNext()throws Exception{
    System.out.printf(
    "2007-11-02 is bigger than 2007-11-03=%s%n",
    isBiggerDate("2007-11-03", "2007-11-02", DATE_FORMT));
    System.out.printf(
    "2007-11-03 is bigger than 2007-11-02=%s%n",
    isBiggerDate("2007-11-02", "2007-11-03", DATE_FORMT));

    System.out.print("\n");

    System.out.printf(
    "2007-11-02 is equals or bigger than 2007-11-03=%s%n",
    isEqualsOrBiggerDate("2007-11-03", "2007-11-02", DATE_FORMT));
    System.out.printf(
    "2007-11-03 is equals or bigger than 2007-11-02=%s%n",
    isEqualsOrBiggerDate("2007-11-02", "2007-11-03", DATE_FORMT));
    System.out.printf(
    "2007-11-02 is equals or bigger than 2007-11-02=%s%n",
    isEqualsOrBiggerDate("2007-11-02", "2007-11-02", DATE_FORMT));

    System.out.print("\n");

    System.out.printf(
    "2007-11-02 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-02", DATE_FORMT));
    System.out.printf(
    "2007-11-05 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-05", DATE_FORMT));

    System.out.printf(
    "2007-11-03 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-03", DATE_FORMT));
    System.out.printf(
    "2007-11-30 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-11-30", DATE_FORMT));
    System.out.printf(
    "2007-12-01 is between of 2007-11-03 and 2007-11-30=%s%n",
    isBetweenOfStartDateAndEndDate(
    "2007-11-03", "2007-11-30", "2007-12-01", DATE_FORMT));
    }

    /**
    * 특정 날짜가 기준 날짜보다 큰가를 검사한다.
    * 기준날짜와 비교할 날짜는 같은 패턴을 가져야 한다.
    *
    * @param basis 기준잘짜
    * @param target 비교할 날짜
    * @param format 기준날짜와 비교할 날짜의 형식화 패턴
    * @return true-비교할 날짜가 기준 날짜보다 크다.
    * @throws ParseException
    * 기준날짜나 비교할 날짜가 해당 형식화패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isBiggerDate(
    String basis, String target, String format) throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    return parseDate(basis, df).getTime() < parseDate(target, df).getTime();
    }

    /**
    * 특정 날짜가 기준 날짜보다 크거나 같은가를 검사한다.
    * 기준날짜와 비교할 날짜는 같은 패턴을 가져야 한다.
    *
    * @param basis 기준잘짜
    * @param target 비교할 날짜
    * @param format 기준날짜와 비교할 날짜의 형식화 패턴
    * @return true-비교할 날짜가 기준 날짜보다 크거나 같다.
    * @throws ParseException
    * 기준날짜나 비교할 날짜가 해당 형식화패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isEqualsOrBiggerDate(
    String basis, String target, String format)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    return parseDate(basis, df).getTime() <= parseDate(target, df).getTime();
    }

    /**
    * 특정 날짜가 어떤 날짜 구간에 존재하는 가를 검사한다.
    * 비교할 날짜와 구간을 시작하는 날짜, 구간이 끝나는 날짜는 같은 패턴을 가져야 한다.
    *
    * @param startBasis 구간의 시작 날짜
    * @param endBasis 구간의 끝날짜
    * @param target 비교할 날짜
    * @param format 날짜의 형식화 패턴
    * @return true-구간 사이에 존재한다. (startBasis <= target <= endBasis)이다.
    * @throws ParseException 각 날짜가 형식화 패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isBetweenOfStartDateAndEndDate(
    String startBasis, String endBasis,
    String target, String format)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    Date td = parseDate(target, df);
    return
    parseDate(startBasis, df).getTime() <= td.getTime() &&
    td.getTime() <= parseDate(endBasis, df).getTime();
    }

    /**
    * 어플리케이션이 구동되고 있는 시스템의 현재 날짜가 어떤 날짜 구간에
    * 존재하는가를 검사한다.
    * 구간을 시작하는 날짜, 구간이 끝나는 날짜는 같은 패턴을 가져야 한다.
    *
    * @param startBasis 구간의 시작 날짜
    * @param endBasis 구간의 끝날짜
    * @param format 날짜의 형식화 패턴
    * @return true-구간 사이에 존재한다. (startBasis <= 시스템 현재시간 <= endBasis)이다.
    * @throws ParseException 각 날짜가 형식화 패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isBetweenOfStartDateAndEndDate(
    String startBasis, String endBasis, String format)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    long ct = System.currentTimeMillis();
    return
    parseDate(startBasis, df).getTime() <= ct &&
    ct <= parseDate(endBasis, df).getTime();
    }
    /**
    * {@link SimpleDateFormat}의 instance를 반환한다.
    *
    * @param format 형식화 패턴
    * @return java.text.SimpleDateFormat
    * @author neoburi@nowonplay.com
    */
    private static DateFormat getSimpleDateFormat(String format){
    return new SimpleDateFormat(format);
    }

    /**
    * 특정 날짜 형식화 패턴을 기준으로 문자열로 구성된 날짜를 받아 {@link Date}객체를
    * 생성하여 반환한다.
    * 날짜문자열은 반드시 Date Formatter가 보유한 형식화 패턴과 일치하는 패턴이어야 한다.
    *
    * @param date 날짜문자열
    * @param formatter 날짜문자열을 Parsing할 Date Formatter
    * @return {@link java.util.Date}
    * @throws ParseException
    * java.util.Date로 변환할 날짜 문자열이 Date Formatter의 형식화 패턴과 일지하지 않을 때
    * 발생한다.
    * @author neoburi@nowonplay.com
    */
    private static Date parseDate(
    String date, DateFormat formatter)throws ParseException{
    return formatter.parse(date);
    }

    /**
    * 특정 날짜를 받아 {@link Date}객체를 생성하여 반환한다.
    *
    * @param date 날짜문자열
    * @param format 날짜가 보유한 형식화 패턴
    * @return {@link java.util.Date}
    * @throws ParseException
    * java.util.Date로 변환할 날짜 문자열이 형식화 패턴과 일지하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static Date parseDate(
    String date, String format)throws ParseException{
    return getSimpleDateFormat(format).parse(date);
    }
    /**
    * 특정날짜가 어플리케이션이 구동되고 있는 시스템의 현재 날짜에서 특정시간(밀리초)을
    * 지났는가에 대한 검사를 수행한다.
    *
    * @param date 비교할 날짜
    * @param format 비교할 날짜가 보유한 형식화 패턴
    * @param time 검사할 시간(밀리초)
    * @return true-특정 날짜가 시스템의 현재시간에서 특정 시간(밀리초)만큼 지났음.
    * ((시스템의 현재시간 - 비교날짜의 시간) > 비교시간)이다.
    * @throws ParseException 비교할 날짜가 형식화 패턴과 일치하지 않을 때 발생한다.
    * @author neoburi@nowonplay.com
    */
    public static boolean isLapse(
    String date, String format, long time)throws ParseException{
    DateFormat df = getSimpleDateFormat(format);
    return (System.currentTimeMillis() - parseDate(date, df).getTime()) > time;
    }
    }
  • 너부리
  • 2007-11-03 14:06:02
  • x

'Programming > JAVA/JSP' 카테고리의 다른 글

[Java] 이클립스에 jad 설정하기  (0) 2010.05.25
Eclipse Error - Workspace Cannot Be Locked 해결 방법  (0) 2010.03.15
OutOfMemory 해결 방법?  (0) 2010.02.11
Java && Excel 연동  (0) 2010.02.11
파일 Download에 관한 참고  (0) 2010.02.11