2014-09-10 5 views
0

Мне нужен метод, который принимает целочисленный ввод (N) и возвращает дни рождения в следующие N дней. Мне очень сложно получить какой-либо код. Ниже приведен только код того, как я хочу, чтобы он работал - это ни в коем случае не рабочий код. Любая помощь высоко ценится.Метод расчета предстоящих дней рождения в следующие N дней

/* 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 'java.time' или Joda Time? –

+0

birthdayList - содержит ли строки или даты? –

+0

Использование Java Мгновенное действие имеет методы 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); 

где

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; 
} 

Теперь сравните этот список дат со списком Birthday дат и работать соответственно

1

Поиск StackOverflow

Краткий ответ, как этот вид работы был рассмотрен сотни, если не тысячи, раз на StackOverflow. Пожалуйста, найдите StackOverflow для получения дополнительной информации. Найдите «joda» и «полуоткрытый», и, возможно, «непреложный». И, очевидно, искать имена классов и методов, приведенные ниже в примере кода.

Избегайте java.util.Date & .Calendar

Избегайте классов java.util.Date и .Calendar в комплекте с Java. Они, как известно, хлопотно. Используйте либо Joda-Time или новый java.time пакет в Java 8.

Joda-Time

Если предположить, что список содержит объекты java.util.Date, конвертировать их в Joda-Time DateTime объектов.

// 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); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^