Получить следующие 7 дней, начиная с текущего дня

У меня 7 дней в неделю, начиная с понедельника. Но в моем проекте я хочу, чтобы следующие 7 дней начинались с текущего дня. Пример: если сегодня понедельник 12.09.2013. Список, как показано ниже:

Monday, 09/12/2013
Tuesday, 10/12/2013
Wednesday, 11/12/2013
Thursday, 12/12/2013
Friday, 13/12/2013
Saturday, 14/12/2013
Sunday, 15/12/2013

Далее: если сегодня вторник 12.10.2013. Список, как показано ниже:

Tuesday, 10/12/2013
Wednesday, 11/12/2013
Thursday, 12/12/2013
Friday, 13/12/2013
Saturday, 14/12/2013
Sunday, 15/12/2013
Monday, 16/12/2013

Мой код получает 7 дней недели, начиная с понедельника

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
/*
* Get Date in 7 days
*/
for(int i = 0; i < 7;i++){
    Calendar[i] = format.format(date.getTime());
    date.add(Calendar.DATE  , 1);
    System.out.println("date :" + Calendar[i]);
}

person Tungken    schedule 08.12.2013    source источник
comment
Решение 2018 года - использовать LocalDate.datesUntil().   -  person Ole V.V.    schedule 13.07.2018


Ответы (4)


String dt = "2008-01-01";  // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 7);  // number of days to add
dt = sdf.format(c.getTime());  // dt is now the new date

взял из этой ветки

Как увеличить дату на один день в Java?

person code4jhon    schedule 08.12.2013

Остальные ответы верны.

Джода-Тайм

Ради интереса я сделал такой же код, но с использованием библиотеки Joda-Time 2.3.

Первый момент дня

Обратите внимание на вызовы _1 _ . При работе со значениями даты и времени, но с упором на часть даты, рекомендуется устанавливать время на первый момент дня. Внимание! Никогда не устанавливайте время на все нули - это время может не существовать как летнее время (DST). может перевести часы за полночь.

Одна из причин получить первый момент дня - это просто чертовски важно, чтобы избежать возможных аномалий или проблем с переносом на другой день. Другая причина состоит в том, чтобы сделать код самодокументированным, показывая наше намерение сосредоточиться на дате, а не на времени.

Только дата

Если вы искренне хотите только дату, используйте LocalDate вместо этого. Но подумайте дважды. Часто, когда люди наивно полагают, что им нужно только свидание, им на самом деле нужна дата и время.

Пример кода

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime today = new DateTime().withTimeAtStartOfDay();

// ISO 8601 format
for(int i=0; i<7; i++){
    System.out.println( today.plusDays( i ).withTimeAtStartOfDay() );
}

// User's default "short" format.
for(int i=0; i<7; i++){
    System.out.println( DateTimeFormat.shortDate().print( today.plusDays( i ) ) );
}

// Specific format demanded by the StackOverflow.com question.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd/MM/yyyy" );
for(int i=0; i<7; i++){
    System.out.println( formatter.print( today.plusDays( i ) ) );
}

При запуске…

2013-12-08T00:00:00.000-08:00
2013-12-09T00:00:00.000-08:00
2013-12-10T00:00:00.000-08:00
2013-12-11T00:00:00.000-08:00
2013-12-12T00:00:00.000-08:00
2013-12-13T00:00:00.000-08:00
2013-12-14T00:00:00.000-08:00
12/8/13
12/9/13
12/10/13
12/11/13
12/12/13
12/13/13
12/14/13
08/12/2013
09/12/2013
10/12/2013
11/12/2013
12/12/2013
13/12/2013
14/12/2013
person Basil Bourque    schedule 08.12.2013

Вы оставляете свой код таким, какой он есть, и просто удаляете свой вызов set. Когда вы вызываете getInstance для календаря, вы получаете обратно экземпляр календаря, для которого установлены текущая дата и время.

Ex:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Calendar date = Calendar.getInstance();

for(int i = 0; i < 7;i++){
    Calendar[i] = format.format(date.getTime());
    date.add(Calendar.DATE  , 1);
    System.out.println("date :" + Calendar[i]);
}
person Bobbake4    schedule 08.12.2013
comment
Код не на 100% правильный. Calendar[i] должен быть массивом строк. Создайте такую ​​строку String[] calendarDays = new String[7]; После вы используете calendarDays[i] = format.format(calendar.getTime()); - person André Luiz Reis; 12.07.2018

person    schedule
comment
Только кодовые ответы редко бывают полезными. И ИМХО в 2018 году ответ с использованием давно устаревшего и плохо спроектированного класса Calendar и общеизвестно проблемного SimpleDateFormat должен как минимум содержать примечание об этом. - person Ole V.V.; 13.07.2018
comment
Кроме того, похоже, вы не отвечаете на вопрос (я цитирую и подчеркиваю) «Я хочу, чтобы следующие 7 дней начинались с текущего дня». - person Ole V.V.; 13.07.2018