2014-09-10 3 views
0

정수 입력 (N)을 사용하고 다음 N 일 이내에 생일을 반환하는 메소드가 필요합니다. 나는 어떤 코드를 실행시키는 것이 매우 어렵다는 것을 알고있다. 아래 코드는 작동 방법을 나타내는 코드입니다. 작동 코드가 아닙니다. 어떤 도움을 주셔서 감사합니다.다음 N 일간 다가오는 생일을 계산하는 방법

public static List<String> returnListOfDatesBetweenTwoDates(java.util.Date fromDate, 
                  java.util.Date toDate) { 
    List<String> listOfDates = Lists.newArrayList(); 
    Calendar startCal = Calendar.getInstance(Locale.ENGLISH); 
    startCal.setTime(fromDate); 
    Calendar endCal = Calendar.getInstance(Locale.ENGLISH); 
    endCal.setTime(toDate); 
    while (startCal.getTimeInMillis() <= endCal.getTimeInMillis()){ 
     java.util.Date date = startCal.getTime(); 
     listOfDates.add(new SimpleDateFormat("dd-MM-yyyy" 
               , Locale.ENGLISH).format(date).trim()); 
     startCal.add(Calendar.DATE, 1); 
    } 
    return listOfDates; 
} 

지금 날짜의 생일 목록을 날짜의 목록을 비교하고 그에 따라 작동

/* print out all the birthdays in the next N days */ 
public void show(int N){ 
    Calendar cal = Calendar.getInstance(); 
    Date today = cal.getTime(); 

    // birthdayList is the list containing a list 
    // of birthdays Format: 12/10/1964 (MM/DD/YYYY) 

    for(int i = 0; i<birthdayList.getSize(); i++){ 
     if(birthdayList[i].getTime()- today.getTime()/(1000 * 60 * 60 * 24) == N)){ 
      System.out.println(birthdayList[i]); 
     } 
    } 

} 
+1

첫 번째 호출 포트 - 가능한 경우 java.util.Date 및 java.util.Calendar를 포기합니다. Java 8의'java.time' 패키지 나 Joda Time을 사용할 수 있습니까? –

+0

birthdayList - 문자열 또는 날짜가 포함되어 있습니까? –

+0

Java Instant를 사용하면 날짜를 캡슐화하는 isBefore 및 isAfter 메소드가 있습니다. – StackFlowed

답변

1
Calendar calendar = Calendar.getInstance(Locale.ENGLISH); 
calendar.setTime(new Date()); 
calendar.add(Calendar.DATE, n); // n is the number of days upto which to be calculated 
Date futureDate = calendar.getTime(); 
List<String> listOfDates = returnListOfDatesBetweenTwoDates(new Date() 
                   , futureDate); 

1

검색 StackOverflow에 이런 종류의 작업으로

간단한 대답 StackOverflow에서 수천 번이 아니라 수백 번 처리되었습니다. 자세한 정보는 StackOverflow를 검색하십시오. "joda"와 "half-open"을 검색하고 "immutable"을 검색하십시오. 그리고 분명히 아래 예제 코드에서 볼 수있는 클래스와 메소드 이름을 검색하십시오.

않도록 java.util.Date & .Calendar

자바와 함께 번들로 java.util.Date와 .Calendar 클래스를 피하십시오. 그들은 귀찮게 골칫거리입니다. Joda 타임에 DateTime 객체를 변환, java.util.Date 객체가 포함 Joda 타임 또는 Java 8

Joda 타임 목록을 가정

의 새로운 java.time 패키지 중 하나를 사용합니다.

// birthDates is a list of java.util.Date objects. 
DateTimeZone timeZone = DateTimeZone.forID("America/Montreal"); 
DateTime now = DateTime.now(timeZone); 
Interval future = new Interval(now, now.plusDays(90).withTimeAtStartOfDay()); // Or perhaps .plusMonths(3) depending on your business rules. 
List<DateTime> list = new ArrayList<>(); 
for(java.util.Date date : birthDates) { 
    DateTime dateTime = new DateTime(date, timeZone); // Convert from java.util.Date to Joda-Time DateTime. 
    If(future.contains(dateTime)) { 
     list.add(dateTime); 
    } 
} 
관련 문제