Я хочу список дат между датой начала и дата окончания.
Результатом должен быть список всех дат включая запуск и дата окончания.
Вы также можете посмотреть Date.getTime () API. Это дает длинную позицию, к которой вы можете добавить свое приращение. Затем создайте новую дату.
List<Date> dates = new ArrayList<Date>();
long interval = 1000 * 60 * 60; // 1 hour in millis
long endtime = ; // create your endtime here, possibly using Calendar or Date
long curTime = startDate.getTime();
while (curTime <= endTime) {
dates.add(new Date(curTime));
curTime += interval;
}
и, возможно, у apache commons есть что-то подобное в DateUtils, или, возможно, у них тоже есть CalendarUtils :)
РЕДАКТИРОВАТЬ
, включая начальную и конечную дату, может быть невозможно, если ваш интервал не идеально :)
Одно из решений - создать экземпляр Calendar
и запустить цикл, увеличив его Calendar.DATE
поле, пока не будет достигнута желаемая дата. Также на каждом шаге вы должны создавать экземпляр Date
(с соответствующими параметрами) и помещать его в свой список.
Какой-то грязный код:
public List<Date> getDatesBetween(final Date date1, final Date date2) {
List<Date> dates = new ArrayList<Date>();
Calendar calendar = new GregorianCalendar() {{
set(Calendar.YEAR, date1.getYear());
set(Calendar.MONTH, date1.getMonth());
set(Calendar.DATE, date1.getDate());
}};
while (calendar.get(Calendar.YEAR) != date2.getYear() && calendar.get(Calendar.MONTH) != date2.getMonth() && calendar.get(Calendar.DATE) != date2.getDate()) {
calendar.add(Calendar.DATE, 1);
dates.add(new Date(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE)));
}
return dates;
}
Еще в 2010 году я предложил использовать для этого Joda-Time .
Обратите внимание, что Joda-Time сейчас находится в режиме обслуживания. Начиная с версии 1.8 (2014 г.), вы должны использовать
java.time
.
Добавляйте по одному дню до достижения конечной даты:
int days = Days.daysBetween(startDate, endDate).getDays();
List<LocalDate> dates = new ArrayList<LocalDate>(days); // Set initial capacity to `days`.
for (int i=0; i < days; i++) {
LocalDate d = startDate.withFieldAdded(DurationFieldType.days(), i);
dates.add(d);
}
Не было бы слишком сложно реализовать свой собственный итератор, чтобы сделать это, это было бы еще лучше.
Получить количество дней между датами включительно.
public static List<Date> getDaysBetweenDates(Date startdate, Date enddate)
{
List<Date> dates = new ArrayList<Date>();
Calendar calendar = new GregorianCalendar();
calendar.setTime(startdate);
while (calendar.getTime().before(enddate))
{
Date result = calendar.getTime();
dates.add(result);
calendar.add(Calendar.DATE, 1);
}
return dates;
}
пожалуйста, найдите приведенный ниже код.
List<Date> dates = new ArrayList<Date>();
String str_date ="27/08/2010";
String end_date ="02/09/2010";
DateFormat formatter ;
formatter = new SimpleDateFormat("dd/MM/yyyy");
Date startDate = (Date)formatter.parse(str_date);
Date endDate = (Date)formatter.parse(end_date);
long interval = 24*1000 * 60 * 60; // 1 hour in millis
long endTime =endDate.getTime() ; // create your endtime here, possibly using Calendar or Date
long curTime = startDate.getTime();
while (curTime <= endTime) {
dates.add(new Date(curTime));
curTime += interval;
}
for(int i=0;i<dates.size();i++){
Date lDate =(Date)dates.get(i);
String ds = formatter.format(lDate);
System.out.println(" Date is ..." + ds);
}
выход:
Дата ...27/08/2010
Дата ...28.08.2010
Дата ...29/08/2010
Дата ...30.08.2010
Дата ...31/08/2010
Дата...09.01.2010
Дата ...09.02.2010