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 인스턴스 에서 단순 isBefore
및 isAfter
메서드 를 사용하는 것 입니다. 그런데 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)
'developer tip' 카테고리의 다른 글
좋은 프로그래머의 코드는 어떤 모습일까요? (0) | 2020.09.10 |
---|---|
EditText의 setHintTextColor () (0) | 2020.09.10 |
Java를 사용하여 16 진수를 RGB로 변환하는 방법은 무엇입니까? (0) | 2020.09.10 |
그룹화 된 Pandas DataFrame에 함수를 병렬로 효율적으로 적용 (0) | 2020.09.10 |
지구가 아닌 달력 구현 (0) | 2020.09.10 |