source

시간 부분을 사용하지 않고 두 날짜를 비교하려면 어떻게 해야 합니까?

itover 2022. 11. 12. 08:47
반응형

시간 부분을 사용하지 않고 두 날짜를 비교하려면 어떻게 해야 합니까?

java.util의 시간 부분을 무시하는 compareTo 메서드를 원합니다.날짜. 여러 가지 방법이 있을 것 같아요.가장 간단한 방법이 뭐죠?

업데이트: 당시에는 Joda Time이 훌륭한 권장 사항이었지만, 가능하면 Java 8+에서 라이브러리를 사용하십시오.


Joda Time을 사용하면 매우 간단합니다.

DateTime first = ...;
DateTime second = ...;

LocalDate firstDate = first.toLocalDate();
LocalDate secondDate = second.toLocalDate();

return firstDate.compareTo(secondDate);

편집: 코멘트에도 기재되어 있듯이, 사용하면 한층 더 심플해집니다.

// TODO: consider extracting the comparator to a field.
return DateTimeComparator.getDateOnlyInstance().compare(first, second);

('시간 사용'은 '조다 시간'을 묻는 java.util.Date ★★★★★★★★★★★★★★★★★」java.util.Calendar완전히 뛰어난 API입니다.날짜/시간과 관련하여 중요한 일을 하고 있다면, 가능하면 그것을 사용하는 것이 좋습니다.)

빌트인 API를 사용해야 하는 경우 다음 인스턴스를 생성해야 합니다.Calendar적절한 날짜를 지정하고 적절한 시간대를 사용합니다.그런 다음 각 캘린더의 각 필드를 시간, 분, 초 및 밀리초로 0으로 설정하고 그 결과를 비교할 수 있습니다. 확실히

하다: 시간대는 중요하다.java.util.Date는 항상 UTC를 기반으로 합니다.제가 데이트에 관심이 있는 대부분의 경우, 그것은 특정 시간대의 데이트입니다.그것만으로도 당신은 어쩔 수 없이Calendar또는 Joda Time(본인이 시간대를 설명하지 않는 한 권장하지 않습니다)

Android 개발자를 위한 빠른 참조

//Add joda library dependency to your build.gradle file
dependencies {
     ...
     implementation 'joda-time:joda-time:2.9.9'
}

샘플코드(예)

DateTimeComparator dateTimeComparator = DateTimeComparator.getDateOnlyInstance();

Date myDateOne = ...;
Date myDateTwo = ...;

int retVal = dateTimeComparator.compare(myDateOne, myDateTwo);

if(retVal == 0)
   //both dates are equal
else if(retVal < 0)
   //myDateOne is before myDateTwo
else if(retVal > 0)
   //myDateOne is after myDateTwo

Apache commons-lang은 거의 어디에나 있습니다.그럼 이건 어때?

if (DateUtils.isSameDay(date1, date2)) {
    // it's same
} else if (date1.before(date2)) {
   // it's before
} else {
   // it's after
}

java.util을 정말로 사용하고 싶은 경우.Date, 당신은 다음과 같은 일을 할 것입니다.

public class TimeIgnoringComparator implements Comparator<Date> {
  public int compare(Date d1, Date d2) {
    if (d1.getYear() != d2.getYear()) 
        return d1.getYear() - d2.getYear();
    if (d1.getMonth() != d2.getMonth()) 
        return d1.getMonth() - d2.getMonth();
    return d1.getDate() - d2.getDate();
  }
}

또는 캘린더를 대신 사용합니다(getYear() 등은 권장되지 않으므로 권장).

public class TimeIgnoringComparator implements Comparator<Calendar> {
  public int compare(Calendar c1, Calendar c2) {
    if (c1.get(Calendar.YEAR) != c2.get(Calendar.YEAR)) 
        return c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR);
    if (c1.get(Calendar.MONTH) != c2.get(Calendar.MONTH)) 
        return c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
    return c1.get(Calendar.DAY_OF_MONTH) - c2.get(Calendar.DAY_OF_MONTH);
  }
}

제 취향은 Joda 도서관을 사용하는 것입니다.java.util.DateJoda가 날짜와 시간을 구별하기 때문에 직접 확인할 수 있습니다(YearMonthDay DateTime 클래스 참조).

,를 약약음음음음음음음음면면면면면면면면 however however however however.java.util.Date예를 들어, 유틸리티 방법을 작성할 것을 제안합니다.

public static Date setTimeToMidnight(Date date) {
    Calendar calendar = Calendar.getInstance();

    calendar.setTime( date );
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    return calendar.getTime();
}

이 대안에 대한 의견은요?

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.format(date1).equals(sdf.format(date2));

두 날짜의 월, 일, 년만 비교하려면 다음 코드가 좋습니다.

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.format(date1).equals(sdf.format(date2));

고마워요 롭.

dr;dr

myJavaUtilDate1.toInstant()
               .atZone( ZoneId.of( "America/Montreal" ) )
               .toLocalDate()
               .isEqual (
                   myJavaUtilDate2.toInstant()
                                  .atZone( ZoneId.of( "America/Montreal" ) )
                                  .toLocalDate()
               )

레거시 날짜/시간 클래스 사용 안 함

date date시시시시시시시 / such시 as such such such such such such such such such such such 등 번거로운 .Date&Calendar classestime.time으로

java.time 사용

A java.util.DateUTC로 .에 상당하는 것은 java.time입니다.Instant클래스에 된 새로운 할 수 레거시 클래스에 추가된 새로운 메서드를 사용하여 변환할 수 있습니다.

Instant instant1 = myJavaUtilDate1.toInstant();
Instant instant2 = myJavaUtilDate2.toInstant();

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

다음 형식으로 적절한 시간대 이름을 지정합니다.continent/region, , , 등Pacific/Auckland EST ★★★★★★★★★★★★★★★★★」IST이는 진정한 표준 시간대가 아니며 표준화되지 않았으며 고유하지도 않기 때문입니다(!).

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

'적용하다'를 붙입니다.ZoneIdInstantZonedDateTime.

ZonedDateTime zdt1 = instant1.atZone( z );
ZonedDateTime zdt2 = instant2.atZone( z );

클래스는 시간대 및 시간대가 없는 날짜 전용 값을 나타냅니다.추출할 수 있습니다.LocalDate ZonedDateTime아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.

LocalDate localDate1 = zdt1.toLocalDate();
LocalDate localDate2 = zdt2.toLocalDate();

비교해보겠습니다. .isEqual,isBefore , , , , 입니다.isAfter.

Boolean sameDate = localDate1.isEqual( localDate2 );

코드는 IdeOne.com에서 라이브로 실행됩니다.

instant1: 2017-03-25T04:13:10.971Z|instant2:2017-03-24T22:13:10.972Z

zdt1: 2017-03-25T00:13:10.971-04:00[미국/몬트리올]| zdt2: 2017-03-24T18:13:10.972-04:00[미국/몬트리올]

local Date1: 2017-03-25 | local Date2: 2017-03-24

같은 날짜: false


java.time 정보

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

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

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

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

  • Java SE 8 및 SE 9 이후
    • 붙박이.
    • 번들 구현이 포함된 표준 Java API의 일부입니다.
    • Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되어 있습니다.
  • Java SE 6 및 SE 7
    • java.time 기능의 대부분은 ThreeTen 백포트의 Java 6 및7로 백포트됩니다.
  • 안드로이드

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

저도 조다 타임을 선호합니다만, 다른 대안이 있습니다.

long oneDay = 24 * 60 * 60 * 1000
long d1 = first.getTime() / oneDay
long d2 = second.getTime() / oneDay
d1 == d2

편집

UTC 이외의 특정 시간대의 날짜를 비교해야 할 경우를 대비하여 아래에 UTC를 기재합니다.그래도 그런 일이 있다면 조다를 찾는 게 좋을 것 같아요.

long oneDay = 24 * 60 * 60 * 1000
long hoursFromUTC = -4 * 60 * 60 * 1000 // EST with Daylight Time Savings
long d1 = (first.getTime() + hoursFromUTC) / oneDay
long d2 = (second.getTime() + hoursFromUTC) / oneDay
d1 == d2

이미 언급한 apache commons-utils:

org.apache.commons.lang.time.DateUtils.truncate(date, Calendar.DAY_OF_MONTH)

는 시간날짜만 하는 날짜 개체를 하며, 이할 수 .Date.compareTo

유감스럽게도 '쉽다'거나 '단순하다'고 할 수 있는 두 날짜를 비교할 수 있는 방법은 없습니다.

정확도가 저하된 두 개의 시간 인스턴스를 비교할 때(예: 날짜만 비교) 항상 시간대가 비교에 미치는 영향을 고려해야 합니다.

ifdate1는 +2 및 +2 시간대에 발생한 입니다.date2EST에서 를 들어를 올바르게 합니다.예를 들어 비교의 의미를 올바르게 이해하려면 주의가 필요합니다.

두 이벤트가 동일한 날짜에 각각의 시간대에서 발생했는지 확인하는 것이 목적입니까?또는 두 날짜가 특정 시간대(예: UTC 또는 로컬 TZ)에서 동일한 달력 날짜에 속하는지 확인해야 합니다.

실제로 비교하려는 것이 무엇인지 알고 나면, 적절한 시간대에서 1년 전 날짜의 3배를 얻고 비교하기만 하면 됩니다.

Joda 시간은 실제 비교 연산을 훨씬 더 깨끗하게 보일 수 있지만 비교의 의미는 여전히 스스로 알아내야 하는 것입니다.

8을 8을 해야 .java.time.* 수업 - 한 날짜 합니다.java.util.*

예: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html

LocalDate date1 = LocalDate.of(2016, 2, 14);
LocalDate date2 = LocalDate.of(2015, 5, 23);
date1.isAfter(date2);

시간 없이 두 날짜만 비교하려면 다음 코드가 도움이 될 수 있습니다.

final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date dLastUpdateDate = dateFormat.parse(20111116);
Date dCurrentDate = dateFormat.parse(dateFormat.format(new Date()));
if (dCurrentDate.after(dLastUpdateDate))
{
   add your logic
}

새로운 생각인지 다른 생각인지는 모르겠지만, 내가 했던 대로 너에게 보여줄게.

SimpleDateFormat dtf = new SimpleDateFormat("dd/MM/yyyy");
Date td_date = new Date();
String first_date = dtf.format(td_date);    //First seted in String 
String second_date = "30/11/2020";          //Second date you can set hear in String

String result = (first_date.equals(second_date)) ? "Yes, Its Equals":"No, It is not Equals";
System.out.println(result);

당일 확인만 하면 됩니다.OF_YEAR와 YEAR 속성

boolean isSameDay = 
firstCal.get(Calendar.YEAR) == secondCal.get(Calendar.YEAR) &&
firstCal.get(Calendar.DAY_OF_YEAR) == secondCal.get(Calendar.DAY_OF_YEAR)

편집:

Kotlin 확장 기능의 힘을 사용할 수 있게 되었습니다.

fun Calendar.isSameDay(second: Calendar): Boolean {

    return this[Calendar.YEAR] == second[Calendar.YEAR] && this[Calendar.DAY_OF_YEAR] == second[Calendar.DAY_OF_YEAR]
}

fun Calendar.compareDatesOnly(other: Calendar): Int {

    return when {
        isSameDay(other) -> 0
        before(other) -> -1
        else -> 1
    }
}

다음은 이 블로그의 해결책입니다.http://brigitzblog.blogspot.com/2011/10/java-compare-dates.html

long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println("Time in days: " + diffDays  + " days.");

즉, 밀리초 단위의 시간 차이가 하루의 길이보다 작은지 확인할 수 있습니다.

`

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

   Date date1=sdf.parse("03/25/2015");



  Date currentDate= sdf.parse(sdf.format(new Date()));

   return date1.compareTo(currentDate);

`

http://mvnrepository.com/artifact/commons-lang/commons-lang 사용방법

Date date1 = new Date();

Date date2 = new Date();

if (DateUtils.truncatedCompareTo(date1, date2, Calendar.DAY_OF_MONTH) == 0)
    // TRUE
else
    // FALSE

Java 8에서는 Joda Time과 매우 유사한 LocalDate를 사용할 수 있습니다.

public Date saveDateWithoutTime(Date date) {
    Calendar calendar = Calendar.getInstance();

    calendar.setTime( date );
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.HOUR, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    return calendar.getTime();
}

이렇게 하면 시간을 고려하지 않고 날짜를 비교할 수 있습니다.

SimpleDateFormat의 getDateInstance를 사용하면 2개의 날짜 객체만 시간 없이 비교할 수 있습니다.아래 코드를 실행합니다.

public static void main(String[] args) {        
        Date date1  = new Date();
        Date date2  = new Date();
        DateFormat dfg = SimpleDateFormat.getDateInstance(DateFormat.DATE_FIELD);
        String dateDtr1 = dfg.format(date1);
        String dateDtr2 = dfg.format(date2);
        System.out.println(dateDtr1+" : "+dateDtr2);
        System.out.println(dateDtr1.equals(dateDtr2));  

    }

또 다른 간단한 비교 방법은 여기의 답변과 나의 멘토 가이던스를 기반으로 합니다.

public static int compare(Date d1, Date d2) {
    Calendar c1 = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    c1.setTime(d1);
    c1.set(Calendar.MILLISECOND, 0);
    c1.set(Calendar.SECOND, 0);
    c1.set(Calendar.MINUTE, 0);
    c1.set(Calendar.HOUR_OF_DAY, 0);
    c2.setTime(d2);
    c2.set(Calendar.MILLISECOND, 0);
    c2.set(Calendar.SECOND, 0);
    c2.set(Calendar.MINUTE, 0);
    c2.set(Calendar.HOUR_OF_DAY, 0);
    return c1.getTime().compareTo(c2.getTime());
  }

편집: @Jonathan Drapeau에 따르면, 위의 코드가 일부 케이스에 실패했다고 합니다(케이스들을 보고 싶습니다). 그는 제가 이해한 바와 같이 다음을 제안했습니다.

public static int compare2(Date d1, Date d2) {
    Calendar c1 = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    c1.clear();
    c2.clear();
    c1.set(Calendar.YEAR, d1.getYear());
    c1.set(Calendar.MONTH, d1.getMonth());
    c1.set(Calendar.DAY_OF_MONTH, d1.getDay());
    c2.set(Calendar.YEAR, d2.getYear());
    c2.set(Calendar.MONTH, d2.getMonth());
    c2.set(Calendar.DAY_OF_MONTH, d2.getDay());
    return c1.getTime().compareTo(c2.getTime());
}

Date 클래스는 국제화에 준거하지 않기 때문에 권장되지 않습니다.대신 캘린더 클래스가 사용됩니다!

우선, 이 조작은 타임 존에 의해서 다릅니다.따라서 UTC, 컴퓨터 시간대, 좋아하는 시간대 또는 장소를 선택할 수 있습니다.아직 문제가 되지 않는 경우는, 이 회답의 하단의 예를 참조해 주세요.

하지 않기 이 특정 .Comparable오브젝트의 자연스러운 순서는 해당 필드의 날짜가 아닌 날짜로 해야 합니다.예를 들어 다음과 같습니다.

public class ArnesClass implements Comparable<ArnesClass> {

    private static final ZoneId arnesTimeZone = ZoneId.systemDefault();

    private Instant when;

    @Override
    public int compareTo(ArnesClass o) {
        // question is what to put here
    }

}

8 바 88java.time

할 수 .Date로로 합니다.Instant 8 Java 의 대응하는 로 돌아갈 것을 합니다.Date을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을. 을.을. 설정해도 됩니다.ZoneOffset.UTC ★★★★★★★★★★★★★★★★★」ZoneId.of("Europe/Stockholm")적절하다고 것 설정)ZoneOffset하는 것은, 「」이기 때문입니다.ZoneOffset는 의 입니다.ZoneId를 참조해 주세요.

Java 8 클래스를 사용하여 솔루션을 보여주기로 했습니다. :-) :-)compareTo다음 중 하나:

public int compareTo(ArnesClass o) {
    LocalDate dateWithoutTime = when.atZone(arnesTimeZone).toLocalDate();
    LocalDate otherDateWithoutTime = o.when.atZone(arnesTimeZone).toLocalDate();
    return dateWithoutTime.compareTo(otherDateWithoutTime);
}

없는 when 당연히 더when a LocalDate모든 변환을 건너뜁니다.그러면 우리도 더 이상 시간대에 대해 걱정할 필요가 없어.

, 어떤 ,, 떤, 떤, 떤, 떤, 고, 고, 고, 고, 고, 고, 고, 고, 고, 고, 고, 고, 고, your, your, your, your, your, your, 을 선언할 수 없다고 가정해 보겠습니다.whenInstant 인 채로 .Date Java 8을 할 수 8로 Instant처럼 하세요

    LocalDate dateWithoutTime = when.toInstant().atZone(arnesTimeZone).toLocalDate();

마찬가지로o.when.

Java 8은 없습니까?

Java 8을 사용할 수 없는 경우 다음 두 가지 옵션이 있습니다.

  1. 중 합니다.Calendar ★★★★★★★★★★★★★★★★★」SimpleDateFormat.
  2. Java 8 날짜 및 시간 클래스의 백포트를 사용하여 Java 6 및 7로 이동한 후 위와 같이 수행합니다.하단에 링크가 포함되어 있습니다.Joda Time을 사용하지 마십시오.Joda Time을 추천하는 답변이 작성되었을 때는 아마도 좋은 제안이었을 것입니다.그러나 Joda Time은 현재 유지 보수 모드이기 때문에 ThreeTen 백포트는 더 나은 미래 대비 옵션입니다.

구식 방식

아담스키의 답변은 어떻게 시간 부분을 떼어내는지 보여줍니다.DateCalendar 꼭 사용하세요.getInstance(TimeZone) 손에 넣다Calendarinstance를 지정합니다.대안으로 Jorn의 답변 후반부의 아이디어를 사용할 수 있습니다.

「」를 사용합니다.SimpleDateFormat이라고 할 수 .CalendarSimpleDateFormat에는 를 contains contains a a가 되어 있습니다.Calendar그런데 쓰는 것보다 .Calendar★★★★

private static final TimeZone arnesTimeZone = TimeZone.getTimeZone("Europe/Stockholm");
private static final DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
static {
    formatter.setTimeZone(arnesTimeZone);
}

private Date when;

@Override
public int compareTo(ArnesClass o) {
    return formatter.format(when).compareTo(formatter.format(o.when));
}

이것은 Rob의 대답에서 영감을 얻었다.

시간대 의존성

왜 굳이 특정 시간대를 정해야 하죠?예를 들어 UTC의 2배를 3월 24일 0:00(자정)와 12:00(낮 12시)로 비교합니다.CET(유럽/파리 등)에서 그렇게 하면 3월 24일 오전 1시와 오후 1시, 즉 같은 날짜입니다.뉴욕(동부 여름 시간)에서는 3월 23일 20:00와 3월 24일 8:00입니다.즉, 같은 날짜가 아닙니다.따라서 어느 시간대를 선택하느냐에 따라 차이가 생깁니다.컴퓨터의 디폴트만 믿고 있으면, 세계화된 이 세상에서 다른 장소에서 누군가가 당신의 코드를 컴퓨터로 실행하려고 할 때, 당신은 놀랄지도 모릅니다.

링크

Java 8 날짜 및 시간 클래스의 백포트인 ThreeTen Backport에 대한 링크: http://www.threeten.org/threetenbp/

제안:

    Calendar cal = Calendar.getInstance();
    cal.set(1999,10,01);   // nov 1st, 1999
    cal.set(Calendar.AM_PM,Calendar.AM);
    cal.set(Calendar.HOUR,0);
    cal.set(Calendar.MINUTE,0);
    cal.set(Calendar.SECOND,0);
    cal.set(Calendar.MILLISECOND,0);

    // date column in the Thought table is of type sql date
    Thought thought = thoughtDao.getThought(date, language);

    Assert.assertEquals(cal.getTime(), thought.getDate());

Apache Commons를 사용하여 다음을 수행할 수 있습니다.

import org.apache.commons.lang3.time.DateUtils

DateUtils.truncatedEquals(first, second, Calendar.DAY_OF_MONTH)
public static Date getZeroTimeDate(Date fecha) {
    Date res = fecha;
    Calendar calendar = Calendar.getInstance();

    calendar.setTime( fecha );
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    res = calendar.getTime();

    return res;
}

Date currentDate = getZeroTimeDate(new Date());// get current date   

이것이 이 문제를 해결하는 가장 간단한 방법이다.

타임스탬프별로 비교하여 해결했습니다.

    Calendar last = Calendar.getInstance();

    last.setTimeInMillis(firstTimeInMillis);

    Calendar current = Calendar.getInstance();

    if (last.get(Calendar.DAY_OF_MONTH) != current.get(Calendar.DAY_OF_MONTH)) {
        //not the same day
    }

안드로이드는 넓은 공간을 사용하기 때문에 Joda Time을 사용하지 않습니다.사이즈가 중요해요.;)

Java 8 및 Instant를 사용하는 다른 솔루션은 truncatedTo 메서드를 사용하고 있습니다.

지정한 단위로 잘린 이 Instant의 복사본을 반환합니다.

예:

@Test
public void dateTruncate() throws InterruptedException {
    Instant now = Instant.now();
    Thread.sleep(1000*5);
    Instant later = Instant.now();
    assertThat(now, not(equalTo(later)));
    assertThat(now.truncatedTo(ChronoUnit.DAYS), equalTo(later.truncatedTo(ChronoUnit.DAYS)));
}
// Create one day 00:00:00 calendar
int oneDayTimeStamp = 1523017440;
Calendar oneDayCal = Calendar.getInstance();
oneDayCal.setTimeInMillis(oneDayTimeStamp * 1000L);
oneDayCal.set(Calendar.HOUR_OF_DAY, 0);
oneDayCal.set(Calendar.MINUTE, 0);
oneDayCal.set(Calendar.SECOND, 0);
oneDayCal.set(Calendar.MILLISECOND, 0);

// Create current day 00:00:00 calendar
Calendar currentCal = Calendar.getInstance();
currentCal.set(Calendar.HOUR_OF_DAY, 0);
currentCal.set(Calendar.MINUTE, 0);
currentCal.set(Calendar.SECOND, 0);
currentCal.set(Calendar.MILLISECOND, 0);

if (oneDayCal.compareTo(currentCal) == 0) {
    // Same day (excluding time)
}

날짜)를 엄격하게 사용하는 경우java.util.Date또는 외부 라이브러리를 사용하지 않습니다.

public Boolean compareDateWithoutTime(Date d1, Date d2) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    return sdf.format(d1).equals(sdf.format(d2));
}
    Date today = new Date();
    Date endDate = new Date();//this
    endDate.setTime(endDate.getTime() - ((endDate.getHours()*60*60*1000) + (endDate.getMinutes()*60*1000) + (endDate.getSeconds()*1000)));
    today.setTime(today.getTime() - ((today.getHours()*60*60*1000) + (today.getMinutes()*60*1000) + (today.getSeconds()*1000)));

    System.out.println(endDate.compareTo(today) <= 0);

시간/분/초를 0으로 설정하기만 하면 되기 때문에 현재 시각은 두 날짜 모두 동일하지 않습니다.이제 compareTo를 사용합니다.이 메서드는 true가 Yes를 의미하는 "if dueDate is today"를 찾는 데 도움이 되었습니다.

언급URL : https://stackoverflow.com/questions/1439779/how-to-compare-two-dates-without-the-time-portion

반응형