Java에서 날짜가 두 날짜 사이인지 확인하려면 어떻게 해야 합니까?
날짜가 다른 두 날짜 사이에 있는지 확인하려면 어떻게 해야 합니까? 세 날짜가 모두 다음 인스턴스로 표시되는 경우java.util.Date
?
이것이 조금 더 읽기 쉬울 수 있습니다.
Date min, max; // assume these are set to something
Date d; // the date in question
return d.after(min) && d.before(max);
최소값/최대값 순서를 모르는 경우
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;
당신이 대접할 수 있다null
에 얽매이지 않고
if (a == null) {
return b == null || d.compareTo(b) < 0;
} else if (b == null) {
return a.compareTo(d) < 0;
} else {
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.compareTo(min) >= 0 && d.compareTo(max) <= 0;
사용할 수 있습니다.>
대신>=
그리고.<
대신<=
"사이"라는 의미로부터 엔드포인트를 제외합니다.
끝점을 포함한 날짜 사이는 다음과 같이 쓸 수 있습니다.
public static boolean isDateInBetweenIncludingEndPoints(final Date min, final Date max, final Date date){
return !(date.before(min) || date.after(max));
}
주의: @Ponmudi가 코멘트에서 지적한 바와 같이 날짜가 밀리초 단위로 다르면 이 솔루션은 작동하지 않을 수 있습니다.
다음은 Joda-Time 2.3 라이브러리를 사용하여 이를 수행하는 몇 가지 방법입니다.
한 가지 방법은 심플을 사용하는 것입니다.isBefore
그리고.isAfter
메서드를 지정합니다.덧붙여서 Joda-Time의 Date Time은 java.util과 비슷한 개념입니다.날짜(Universe 타임라인의 시간순간)이지만 시간대가 포함됩니다.
또 다른 방법은 Joda-Time으로 Interval을 작성하는 것입니다.그contains
메서드는 지정된 DateTime이 Interval에 포함되는 시간 범위 내에 발생하는지 여부를 테스트합니다.간격의 시작은 포함되지만 끝점은 제외됩니다.이 접근방식은 상징적으로 "하프 오픈(Half-Open)"이라고 불립니다.[)
.
다음 코드 예제의 양쪽 방법을 참조하십시오.
java.util을 변환합니다.인스턴스를 Joda-Time 인스턴스로 날짜 지정.날짜 인스턴스를 DateTime의 생성자에게 전달하기만 하면 됩니다.실제로 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 ) ) );
is After/is Before가 아닌 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 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...");
}
}
Joda Time은 날짜/시간 처리에 매우 적합한 API입니다.현재의 질문에 대한 해답에 실제로 필요한 것은 아니지만, 향후의 수고를 덜어줄 것입니다.
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 값을 비교합니다.
1970년 이전 날짜를 처리할 필요가 없는 경우 편집(Edit) 이 경우 어떻게 동작할지 확실하지 않습니다.
오늘이 2개월 사이인지 여부를 확인하는 방법은 다음과 같습니다.
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;
}
이렇게 불러주세요.
isTodayBetween(Calendar.OCTOBER, Calendar.MARCH)
언급URL : https://stackoverflow.com/questions/883060/how-can-i-determine-if-a-date-is-between-two-dates-in-java
'programing' 카테고리의 다른 글
$date + 1년? (0) | 2022.12.27 |
---|---|
MySQL보다 느린 MariaDB 그룹 (0) | 2022.12.27 |
동기 클러스터링과 비동기 클러스터링 (0) | 2022.12.27 |
Python의 정적 메서드? (0) | 2022.12.27 |
중첩된 각 Output Stream과 Writer를 개별적으로 닫아야 합니까? (0) | 2022.11.27 |