developer tip

Java에서 날짜가 두 날짜 사이에 있는지 어떻게 확인할 수 있습니까?

copycodes 2020. 9. 10. 08:01
반응형

Java에서 날짜가 두 날짜 사이에 있는지 어떻게 확인할 수 있습니까? [복제]


이 질문에 이미 답변이 있습니다.

세 날짜가 모두 인스턴스로 표시되는 경우 날짜가 다른 두 날짜 사이에 있는지 어떻게 확인할 수 java.util.Date있습니까?


최소 / 최대 값의 순서를 모르는 경우

Date a, b;   // assume these are set to something
Date d;      // the date in question

return a.compareTo(d) * d.compareTo(b) > 0;

범위를 포함하려는 경우

return a.compareTo(d) * d.compareTo(b) >= 0;

이것은 좀 더 읽기 쉽습니다.

Date min, max;   // assume these are set to something
Date d;          // the date in question

return d.after(min) && d.before(max);

이렇게 :

Date min, max;   // assume these are set to something
Date d;          // the date in question

return d.compareTo(min) >= 0 && d.compareTo(max) <= 0;

당신이 사용할 수있는 >대신 >=<대신 <=의 의미에서 엔드 포인트를 제외 "사이에."


Joda-Time 2.3 라이브러리를 사용하여이를 수행하는 몇 가지 방법이 있습니다.

한 가지 방법은 DateTime 인스턴스 에서 단순 isBeforeisAfter메서드 를 사용하는 것 입니다. 그런데 Joda-Time의 DateTime은 개념적으로 java.util.Date (우주 타임 라인의 시간)와 유사하지만 시간대를 포함합니다.

또 다른 방법은 Joda-Time에서 간격을 만드는 것입니다. contains메서드는 지정된 DateTime이 Interval에 포함 된 시간 범위 내에서 발생하는지 테스트합니다. 간격의 시작은 포함되지만 끝점은 배타적입니다. 이 접근 방식은 상징적으로 "반 개방"으로 알려져 [)있습니다.

다음 코드 예제에서 두 가지 방법을 모두 참조하십시오.

java.util.Date 인스턴스를 Joda-Time DateTime인스턴스 로 변환합니다 . Date 인스턴스를 DateTime의 생성자에 전달하기 만하면됩니다. 실제로 DateTimeZone는 JVM의 기본 시간대에 의존하는 대신 특정 객체를 전달해야 합니다.

DateTime dateTime1 = new DateTime( new java.util.Date() ).minusWeeks( 1 );
DateTime dateTime2 = new DateTime( new java.util.Date() );
DateTime dateTime3 = new DateTime( new java.util.Date() ).plusWeeks( 1 );

전후 테스트를 통해 비교…

boolean is1After2 = dateTime1.isAfter( dateTime2 );
boolean is2Before3 = dateTime2.isBefore( dateTime3 );

boolean is2Between1And3 = ( ( dateTime2.isAfter( dateTime1 ) ) && ( dateTime2.isBefore( dateTime3 ) ) );

isAfter / isBefore 대신 Interval 접근 방식 사용…

Interval interval = new Interval( dateTime1, dateTime3 );
boolean intervalContainsDateTime2 = interval.contains( dateTime2 );

콘솔에 덤프…

System.out.println( "DateTimes: " + dateTime1 + " " + dateTime1 + " " + dateTime1 );
System.out.println( "is1After2 " + is1After2 );
System.out.println( "is2Before3 " + is2Before3 );
System.out.println( "is2Between1And3 " + is2Between1And3 );
System.out.println( "intervalContainsDateTime2 " + intervalContainsDateTime2 );

실행하면…

DateTimes: 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00
is1After2 false
is2Before3 true
is2Between1And3 true
intervalContainsDateTime2 true

다른 옵션

min.getTime() <= d.getTime() && d.getTime() <= max.getTime()

날짜 사이 끝점을 포함하여 다음과 같이 쓸 수 있습니다.

public static boolean isDateInBetweenIncludingEndPoints(final Date min, final Date max, final Date date){
    return !(date.before(min) || date.after(max));
}

여기 있습니다 :

public static void main(String[] args) throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

        String oeStartDateStr = "04/01/";
        String oeEndDateStr = "11/14/";

        Calendar cal = Calendar.getInstance();
        Integer year = cal.get(Calendar.YEAR);

        oeStartDateStr = oeStartDateStr.concat(year.toString());
        oeEndDateStr = oeEndDateStr.concat(year.toString());

        Date startDate = sdf.parse(oeStartDateStr);
        Date endDate = sdf.parse(oeEndDateStr);
        Date d = new Date();
        String currDt = sdf.format(d);


        if((d.after(startDate) && (d.before(endDate))) || (currDt.equals(sdf.format(startDate)) ||currDt.equals(sdf.format(endDate)))){
            System.out.println("Date is between 1st april to 14th nov...");
        }
        else{
            System.out.println("Date is not between 1st april to 14th nov...");
        }
    }

날짜 / 시간을 처리하는 데 정말 좋은 API 인 Joda Time살펴볼 수 있습니다 . 현재 질문에 대한 해결책에 실제로 필요하지 않더라도 향후 고통을 덜어 줄 수 있습니다.


import java.util.Date;

public class IsDateBetween {

public static void main (String[] args) {

          IsDateBetween idb=new IsDateBetween("12/05/2010"); // passing your Date
 }
 public IsDateBetween(String dd) {

       long  from=Date.parse("01/01/2000");  // From some date

       long to=Date.parse("12/12/2010");     // To Some Date

       long check=Date.parse(dd);

       int x=0;

      if((check-from)>0 && (to-check)>0)
      {
             x=1;
      }

 System.out.println ("From Date is greater Than  ToDate : "+x);
}   

}

getTime()반환 된 긴 UTC ​​값을 사용 하고 비교할 수 있습니다 .

EDIT if you are sure you'll not have to deal with dates before 1970, not sure how it will behave in that case.


Here's how to find whether today is between 2 months:

private boolean isTodayBetween(int from, int to) {
    if (from < 0 || to < 0 || from > Calendar.DECEMBER || to > Calendar.DECEMBER) {
        throw new IllegalArgumentException("Invalid month provided: from = " + from + " to = " + to);
    }
    Date now = new Date();
    GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(now);
    int thisMonth = cal.get(Calendar.MONTH);
    if (from > to) {
        to = to + Calendar.DECEMBER;
        thisMonth = thisMonth + Calendar.DECEMBER;
    }
    if (thisMonth >= from && thisMonth <= to) {
        return true;
    }
    return false;
}

and call it like:

isTodayBetween(Calendar.OCTOBER, Calendar.MARCH)

참고URL : https://stackoverflow.com/questions/883060/how-can-i-determine-if-a-date-is-between-two-dates-in-java

반응형