2009-03-05 2 views
2

Unix의 crontabs 항목과 비슷한 부분 날짜/시간을 정의하는 객체를 갖고 싶습니다. 이자형. "매월 1 일마다"등Java에서 Calendar 객체를 일치 시킵니까?

이러한 개체는 Calendar 개체와 비교되어 일치하는지 확인합니다.

필자는 "TimePattern"클래스를 작성하려고했으나 필드 값이 법적 경계 (0-23 사이의 시간) 안에 있는지를 확인하는 것과 같은 많은 로직을 포함해야했습니다. 어쨌든 캘린더처럼.

이제 일부 필드가 설정되지 않은 (nonlenient) Calendar 개체를 사용하고 있으며 고정 된 시점을 나타내는 완전히 설정된 Calendar 개체와 비교하려고합니다. 나는

  • 는 "matchWith"방법
  • 사용하는 몇 가지 비교 메커니즘을 포함하는 (그레고리오) 달력 클래스를 확장 "과 같거나 해제"에 대한 관련 필드 및 검사를 통과 내 자신의 방법을 작성해야 이미 캘린더 클래스에 있습니다.하지만 지금까지 간과 한 적이 있습니다.
+0

나는 ... 당신이 할 수 – JeeBee

+0

이 문제 봄 유틸리티 클래스 CronTriggerBean 거래의 방법 석영 통합을 확인 궁금해 : –

답변

0

비교기 - MinuteMatch, HourMatch 등을 만들어 두 날짜를 비교할 수 있습니까?

1

과거에 사용한 적이있는 한 가지 해결책은 원하는 필드 만 사용하여 날짜의 서식을 지정하고 결과 문자열을 비교하는 DateFormat을 작성하는 것입니다. 그것을

public boolean sameDate(Calendar c1, Calendar c2) 
{ 
    DateFormat datesOnly = new SimpleDateFormat("yyyy-MM-dd"); 
    return datesOnly.format(c1.getTime()).equals(datesOnly.format(c2.getTime())); 
} 

그것은 당신이 새로운 라이브러리를 만들려고하는 경우에 최적의 구현은 아마 아니지만 예를 들어, 당신이 뭔가를 할 수 있도록 시간 구성 요소 만 날짜에 대해 신경을 꽤 흔한 일 다른 경우에는 꽤 잘 작동합니다.

+0

SimpleDateFormat에없는 SimpleDateFormatter 변경 (이 작업을 수행 할 수있는 충분한 편집 권한이 없으며 동료 변경을 위해 변경 사항을 적어도 6 자 이상 필요합니다.) – Roalt

0

Google's RFC-2445은 무엇이든 사용할 수 있습니까? 그것은 당신이 쉽게 "매월 셋째 달의 첫 번째 월요일"을 의미있게 해주는 날짜 반복 계산기입니다. JodaTime의 어떤이와 함께 도움을한다면

public class CalendarMatch<T extends Calendar> { 
    private T _dt; 

    public CalendarMatch(T dt) { 
     this._dt = dt; 
    } 

    public boolean fMatches(T dtCmp) 
    { 
     int[] rgChecks = { 
          Calendar.HOUR_OF_DAY, 
          Calendar.MINUTE, 
          Calendar.SECOND, 
          Calendar.DAY_OF_MONTH, 
          Calendar.MONTH, 
          Calendar.YEAR, 
          Calendar.DAY_OF_WEEK 
         }; 
     for (int ixField : rgChecks) { 
      // if any field in our partial date is set 
      // but does not equal its counterpart, it's not a match 
      if (this._dt.isSet(ixField) && dtCmp.get(ixField) != this._dt.get(ixField)) { 
       return false; 
      } 
     } 
     // otherwise, it is 
     return true; 
    } 
} 
0

내가 결국 무슨 짓 HTTP : //tinyurl.com/bwo2n6
+0

어떻게 다른가? , 또는 그 이상. 디폴트의 Calendar.equals (Calender) 메소드보다. – banjollity

+0

Calendar.equals가 훨씬 엄격 해, 설정되어 있지 않은 것을 처리하지 않는다. 내가 원했던 분야. 참고 사항 : http://java.sun.com/javase/6/docs/api/java/util/Calendar.html#equals(java.lang.Object) 나는 평등을 찾고 있지 않습니다. 날짜가 아니지만 내 "템플릿"또는 부분 날짜와 일치하는 날짜에 대한 것입니다. –

관련 문제