programing

Java 날짜 비교 방법

firstcheck 2022. 7. 23. 12:06
반응형

Java 날짜 비교 방법

Java에서 날짜를 비교하려면 어떻게 해야 하나요?

예:

은 date1date입니다.22-02-2010
는 date2s입니다.07-04-2010
은 date3s입니다.25-12-2010

date3date1 ★★★★★★★★★★★★★★★★★」date2상상오오오오다다오늘 날짜가 date1과 date3 사이인지 확인하려면 어떻게 해야 하나요?

Date에는 before after 메서드가 있으며 다음과 같이 서로 비교할 수 있습니다.

if(todayDate.after(historyDate) && todayDate.before(futureDate)) {
    // In between
}

포괄적인 비교를 위해:

if(!historyDate.after(todayDate) && !futureDate.before(todayDate)) {
    /* historyDate <= todayDate <= futureDate */ 
}

Joda-Time을 사용해 볼 수도 있지만, 다음 사항에 유의하십시오.

Joda-Time은 Java SE 8 이전 버전의 Java용 사실상의 표준 날짜 및 시간 라이브러리입니다. 이제 사용자는 java.time(JSR-310)으로 마이그레이션해야 합니다.

백포트는 Java 6 및 7 및 Android에서 사용할 수 있습니다.

비교 사용수신인:

date1.compareTo(date2);

입니다.dates(접근법 1을 선호합니다).

1: 사용방법 1: 사용방법Date.before(),Date.after() ★★★★★★★★★★★★★★★★★」Date.equals()

if (date1.after(date2)) {
    System.out.println("Date1 is after Date2");
}

if (date1.before(date2)) {
    System.out.println("Date1 is before Date2");
}

if (date1.equals(date2)) {
    System.out.println("Date1 is equal Date2");
}

2: 근 2 2 2:Date.compareTo()

if (date1.compareTo(date2) > 0) {
    System.out.println("Date1 is after Date2");
} else if (date1.compareTo(date2) < 0) {
    System.out.println("Date1 is before Date2");
} else {
    System.out.println("Date1 is equal to Date2");
}

3: 접근 3 3:Calender.before(),Calender.after( 및 )의 개요Calender.equals()

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);

if (cal1.after(cal2)) {
    System.out.println("Date1 is after Date2");
}

if (cal1.before(cal2)) {
    System.out.println("Date1 is before Date2");
}

if (cal1.equals(cal2)) {
    System.out.println("Date1 is equal Date2");
}

dr;dr

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;
Boolean isBetween = 
    ( ! today.isBefore( localDate1 ) )  // “not-before” is short for “is-equal-to or later-than”.
    &&
    today.isBefore( localDate3 ) ; 

또는 ThreeTen-Extra 라이브러리를 프로젝트에 추가하는 것이 좋습니다.

LocalDateRange.of(
    LocalDate.of( … ) ,
    LocalDate.of( … )
).contains(
    LocalDate.now()
)

하프 오픈 어프로치.시작은 포함하지만 끝은 배타적입니다.

잘못된 형식 선택

참고로 날짜 또는 날짜 값의 텍스트 표현 형식으로는 적합하지 않습니다.가능하면 표준 ISO 8601 형식을 사용하십시오.ISO 8601 형식은 명확하고 인간 문화 전반에 걸쳐 이해할 수 있으며 기계별로 해석하기 쉽습니다.

날짜 전용 값의 경우 표준 형식은 YYY-MM-DD입니다.이 형식은 알파벳 순으로 정렬할 때 연대순으로 정렬된다는 장점이 있습니다.

LocalDate

클래스는 시간대 및 시간대가 없는 날짜 전용 값을 나타냅니다.

표준 시간대는 날짜를 결정하는 데 매우 중요합니다.날짜는 지역에 따라 전 세계적으로 다릅니다.예를 들어 프랑스 파리에서는 자정 몇 분 후가 새로운 날이고 몽트레알 퀘벡에서는 여전히 "어제"입니다.

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

Java의 모든 날짜 유형(현대 및 레거시) 표

DateTimeFormatter

입력 문자열이 비표준 형식이기 때문에 일치하는 형식 패턴을 정의해야 합니다.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" );

이를 사용하여 입력 문자열을 해석합니다.

LocalDate start = LocalDate.parse( "22-02-2010" , f );
LocalDate stop = LocalDate.parse( "25-12-2010" , f );

날짜 작업에서는 일반적으로 시작은 포함하지만 끝은 배타적인 하프 오픈 방식으로 시간 범위를 정의하는 것이 가장 좋습니다.그래서 오늘이 시작과 같은지, 늦게인지, 그리고 정지 전인지 알고 싶습니다."시작과 같거나 늦었다"는 더 간단한 표현 방법은 "시작 전은 아니다"입니다.

Boolean intervalContainsToday = ( ! today.isBefore( start ) ) && today.isBefore( stop ) ;

호출할 수 있는 비교 방식 목록을 보여 주는 "Answer by gstackoverflow" 참조하십시오.


java.time 정보

java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.

자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.

현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.

java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*반.휴지 상태 5 및 JPA 2.2는 java.time을 지원합니다.

java.time 클래스는 어디서 얻을 수 있습니까?

ThreeTen-Extra 프로젝트는 java.time을 추가 클래스로 확장합니다.이 프로젝트는 향후 java.time에 추가될 수 있는 가능성을 입증하는 기반입니다.여기에는 , , , 유용한 클래스가 있습니다.


업데이트: 아래의 "Joda-Time" 섹션은 이력으로 유지됩니다.현재 유지보수 모드에 있는 Joda-Time 프로젝트는 java.time 클래스로의 이행을 권장합니다.

조다 타임

번들된 java.util에 대한 다른 답변은 정확합니다.날짜 및 java.util.캘린더 클래스하지만 그 수업들은 귀찮기로 악명 높다.다음은 Joda-Time 2.3 라이브러리를 사용한 코드 예입니다.

시간대와 시간대가 없는 날짜를 원하는 경우 Joda-Time 클래스를 사용하십시오.이 클래스는 다음을 포함한 비교 방법을 제공합니다.compareTo(Java Comparator와 함께 사용),isBefore,isAfter,그리고.isEqual.

입력...

String string1 = "22-02-2010";
String string2 = "07-04-2010";
String string3 = "25-12-2010";

입력 문자열을 설명하는 포맷터를 정의합니다.

DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd-MM-yyyy" );

포메터를 사용하여 문자열을 LocalDate 개체로 해석합니다.

LocalDate localDate1 = formatter.parseLocalDate( string1 );
LocalDate localDate2 = formatter.parseLocalDate( string2 );
LocalDate localDate3 = formatter.parseLocalDate( string3 );

boolean is1After2 = localDate1.isAfter( localDate2 );
boolean is2Before3 = localDate2.isBefore( localDate3 );

콘솔에 덤프...

System.out.println( "Dates: " + localDate1 + " " + localDate2 + " " + localDate3 );
System.out.println( "is1After2 " + is1After2 );
System.out.println( "is2Before3 " + is2Before3 );

실행 시...

Dates: 2010-02-22 2010-04-07 2010-12-25
is1After2 false
is2Before3 true

두 번째가 다른 두 개의 엔드포인트 사이에 있는지 확인합니다(배타적으로 어느 엔드포인트와도 동일하지 않습니다).

boolean is2Between1And3 = ( ( localDate2.isAfter( localDate1 ) ) && ( localDate2.isBefore( localDate3 ) ) );

시간 범위 작업

시간을 두고 작업하는 경우 Joda-Time에서 다음 수업을 탐색할 것을 제안합니다.기간, 간격기간.다음과 같은 방법overlap그리고.contains비교하기 쉽게 하다

텍스트 표현에 대해서는 ISO 8601 표준을 참조하십시오.

  • 지속
    형식: PnYnMnDTnHnMnS
    예: P3Y6M4DT12H30M5S
    (3년 6개월 4일 12시간 30분 5초)
  • 간격
    형식: 시작/종료
    예: 2007-03-01T13:00:00Z/2008-05-11T15:30:00Z

Joda-Time 클래스는 입력(파싱) 및 출력(문자열 생성) 형식의 문자열과 함께 사용할 수 있습니다.

Joda-Time은 Half-Open 접근방식을 사용하여 비교를 수행합니다.이 접근방식은 스팬의 시작은 포함하지만 은 배타적입니다.이 접근방식은 시간범위에 걸친 처리에 있어 현명한 방법입니다.자세한 내용은 StackOverflow를 검색하십시오.

두 날짜를 비교합니다.

  Date today = new Date();                   
  Date myDate = new Date(today.getYear(),today.getMonth()-1,today.getDay());
  System.out.println("My Date is"+myDate);    
  System.out.println("Today Date is"+today);
  if (today.compareTo(myDate)<0)
      System.out.println("Today Date is Lesser than my Date");
  else if (today.compareTo(myDate)>0)
      System.out.println("Today Date is Greater than my date"); 
  else
      System.out.println("Both Dates are equal"); 

Java 8 이후 업데이트

이러한 메서드는 , 및 클래스에 있습니다.

이러한 클래스는 Java 8 이후에 포함되어 있습니다.java.time 기능의 대부분은 ThreeTen-Backport의 Java 6 및7에 백포트되며 ThreeTenABP의 Android에 더욱 적합합니다(사용방법 참조).

다음 항목을 사용할 수 있습니다.

1970년 1월 1일 00:00:00 GMT 이후 이 Date 객체가 나타내는 밀리초 수를 반환합니다.

즉, 숫자처럼 비교할 수 있습니다.

if (date1.getTime() <= date.getTime() && date.getTime() <= date2.getTime()) {
    /*
     * date is between date1 and date2 (both inclusive)
     */
}

/*
 * when date1 = 2015-01-01 and date2 = 2015-01-10 then
 * returns true for:
 * 2015-01-01
 * 2015-01-01 00:00:01
 * 2015-01-02
 * 2015-01-10
 * returns false for:
 * 2014-12-31 23:59:59
 * 2015-01-10 00:00:01
 * 
 * if one or both dates are exclusive then change <= to <
 */

이거 드셔보세요

public static boolean compareDates(String psDate1, String psDate2) throws ParseException{
        SimpleDateFormat dateFormat = new SimpleDateFormat ("dd/MM/yyyy");
        Date date1 = dateFormat.parse(psDate1);
        Date date2 = dateFormat.parse(psDate2);
        if(date2.after(date1)) {
            return true;
        } else {
            return false;
        }
    }

get Time()을 사용하여 날짜의 숫자 값을 가져온 후 반환된 값을 사용하여 비교합니다.

이 코드에 따라 오늘이 일정 기간인지 알 수 있습니다.KOREA 로케일에 근거해

    Calendar cstart = Calendar.getInstance(Locale.KOREA);
    cstart.clear();
    cstart.set(startyear, startmonth, startday);


    Calendar cend = Calendar.getInstance(Locale.KOREA);
    cend.clear();
    cend.set(endyear, endmonth, endday);

    Calendar c = Calendar.getInstance(Locale.KOREA);

    if(c.after(cstart) && c.before(cend)) {
        // today is in startyear/startmonth/startday ~ endyear/endmonth/endday
    }

이 방법은 나에게 효과가 있었다.

 public static String daysBetween(String day1, String day2) {
    String daysBetween = "";
    SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    try {
        Date date1 = myFormat.parse(day1);
        Date date2 = myFormat.parse(day2);
        long diff = date2.getTime() - date1.getTime();
        daysBetween = ""+(TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return daysBetween;
}

언급URL : https://stackoverflow.com/questions/2592501/how-to-compare-dates-in-java

반응형