2011-01-26 7 views
0

Java (특히 BlackBerry 개발 용)의 Calendar 위젯을 개발했습니다. 사용자는 현재 달의 모든 요일을 볼 수 있으며 월/년 단위로 앞뒤로 이동할 수 있습니다.Java 도움말 캘린더 개체 비교

테이블 형식으로 캘린더를 그릴 때 현재 날짜의 X 일 이전 날짜를 변경하고 싶습니다. 화면에 표시되는 달력은 현재 달과 같은 달 경우에만 나는 현재이를 확인할 수 있습니다

if (calendarMonth == currentMonth) { 
     for (int i = 1; i <= (NUM_DAYS_IN_MONTH); i++) { 
      if (i > currentDay + Constants.CALENDAR_DAYS_IN_ADVANCE) { 
       System.out.println("VALID: " + i); 
      } 
     } 
    } 

하지만 문제가 표시된 달력이 현재와는 다른 달 때위한 솔루션을 코딩 데 달. 예를 들어 오늘은 1 월 26 일이므로 1 월의 모든 일정은 회색으로 표시됩니다. 사용자가 월을 2 월으로 변경하면 다음 일이 회색으로 표시됩니다.

Constants.CALENDAR_DAYS_IN_ADVANCE = 14; 
1/26/2011 - 2/9/2011 

그 범위를 벗어나는 날은 검은 색이됩니다. 그래서 기본적으로 두 개의 java.util.Calendar 객체 (표시된 현재 활성 달력과 현재 날짜에 대한 달력)를 받아들이는 함수를 작성하려고합니다.이 함수는 CURRENT DATE의 범위에있는 날짜의 배열을 반환합니다. CALENDAR_DAYS_IN_ADVANCE. 자바, 나는이 java.util.Calendar.add() 또는 java.util.Calendar.subtract와 날짜() 함수를 비교할 수 없습니다)

1 :

은 또한 다음을 명심해야합니다 2011년 1월

아무도 논리 도와 드릴 - 블랙 베리

2)이 2010 년 12 월 예를 들어,도 년에 걸쳐 작업이 제한됩니다?

감사합니다.

+0

추가 backberry 태그 – adrianboimvaser

+0

왜 monthOfYear-1 일 한 달 설정? – ghy

답변

2

예를 들어, nowCal은 시작일의 00:00:00을 가리키고 maxOffsetCal은 종료일의 23:59:59를 가리키고 있습니다. 다음 코드 원하는 인쇄합니다 날짜 :

public class Test { 
    private final static long MILLIS_IN_DAY = 86400 * 1000; 

    public static void main(String[] args) { 
     Calendar nowCal = new GregorianCalendar(); 
     setTime(nowCal, 29, 1, 2011, 0, 0, 0); 
     Calendar maxOffsetCal = new GregorianCalendar(); 
     setTime(maxOffsetCal, 2, 2, 2011, 23, 59, 59); 
     long now = nowCal.getTimeInMillis(), endTime = maxOffsetCal.getTimeInMillis(); 
     for (; now < endTime; now += MILLIS_IN_DAY) { 
      System.out.println(new Date(now)); 
     } 
    } 

    private static void setTime(Calendar c, int dayOfMonth, int monthOfYear, int year, 
            int hourOfDay, int minute, int second) { 
     c.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
     c.set(Calendar.MONTH, monthOfYear - 1); 
     c.set(Calendar.YEAR, year); 
     c.set(Calendar.HOUR_OF_DAY, hourOfDay); 
     c.set(Calendar.MINUTE, minute); 
     c.set(Calendar.SECOND, second); 
     c.set(Calendar.MILLISECOND, 0); 
    } 
} 
+0

이것은 나에게 큰 도움이되었습니다. 이제는 그 사이의 요일을 알고 있습니다. 요즘 캘린더를 그릴 때 참조를 교차시켜야합니다. 감사! – littleK

0

if (calendarMonth == currentMonth)

이 잘못되었습니다. ==를 사용하여 객체를 비교하지 마십시오. 연산자 ==는 참조를 비교하므로 동일한 객체를 처리하지만 다른 동일한 객체는 처리하지 않는 경우에만 true입니다. 대신 방법 equals()을 사용해야합니다.

+1

이 상황에서는 ==를 사용합니다. calendarMonth와 currentMonth는 모두 기본 유형 int입니다. – littleK