Как добавить 7 дней к текущей дате, не переходя через доступные дни месяца?

Я пытаюсь получить сегодняшний день месяца.

И то, что я хочу сделать, это добавить семь дней к числу и получить текущий день месяца.

Также я хочу, чтобы он смог перейти к следующему месяцу. Предположим, сегодня это 29-й. Когда он добавляет 7 дней, как я могу заставить его перейти в следующий месяц, например 29 + 7, будет равен пятому следующему месяцу.

Как мне это сделать?

Мне уже удалось получить текущую дату.

Calendar cal = Calendar.getInstance();
    int day = cal.get(Calendar.DAY_OF_MONTH);
    int dayOfMonth = day;
    String today = getToday();

Я использую это, потому что я хотел бы запустить asynctask в моей основной деятельности каждые 7 дней.

Ответ 2

Метод добавления календаря делает это для вас: cal.add(Calendar.DATE, 7);

EDIT: Учитывая расширенные комментарии, я думаю, я должен добавить к этому, сказав, что если cal начинается с 4 октября 2011 года, и я вызываю cal.add(Calendar.DATE, 7) новое значение cal - 11 октября 2011 года. Аналогично, если cal начинается с 29 марта 2025 года, то после cal.add(Calendar.DATE, 7) новое значение cal - 5 апреля 2025 года.

Ответ 3

Вы должны использовать метод добавления календаря.

cal.add(Calendar.DAY_OF_MONTH, 7);

Ответ 4

cal.add(Calendar.DAY_OF_MONTH, 7);

Ответ 5

ТЛ; др

LocalDate.now( ZoneId.of( "America/Montreal" ) )  // Todays date.
         .plusWeeks( 1 )   // Yields 'LocalDate' object
         .getDayOfMonth()  // Yields 'int' number

java.time

Java 8 и более поздние версии поставляются с фреймворком java.time. Эти новые классы заменяют старые классы java.util.Date/.Calendar. Для старых Android см. Проекты ThreeTen-Backport и ThreeTenABP, описанные ниже.

Эти классы включают в LocalDate класс LocalDate если вы хотите только дату, без времени и без часового пояса. Но учтите, что часовой пояс имеет решающее значение для определения текущей даты как нового дня, который начинается раньше на востоке.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
LocalDate weekLater = today.plusWeeks( 1 ); // Automatically rolls over between months, no problem.

Если это так, вы можете допросить этот объект LocalDate для своего номера дня месяца.

int dayOfMonth = weekLater.getDayOfMonth();

О java.time

Рамка java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют неприятные старые классы времени, такие как java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Проект Joda-Time, теперь в режиме обслуживания, советует перейти на java.time.

Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений.

Большая часть функциональных возможностей java.time была перенесена на Java 6 и 7 в ThreeTen-Backport и далее адаптирована для Android в ThreeTenABP (см. Как использовать...).

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и другие.


Joda времени

UPDATE: проект Joda-Time теперь находится в режиме обслуживания. Команда советует перейти на классы java.time. Я оставляю этот раздел неповрежденным как история.

В Android без технологии Java 8 вы можете добавить библиотеку Joda-Time в свой проект. Но знайте, что проект Joda-Time находится в режиме обслуживания и советует перейти на классы java.time (см. ThreeTenABP выше для Android).

Joda-Time обеспечил вдохновение для java.time. В этом случае необходимый код очень схож.

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
LocalDate today = LocalDate.now( zone );
LocalDate weekLater = today.plusWeeks( 1 ); // Automatically rolls over between months, no problem.
int dayOfMonth = weekLater.getDayOfMonth();

Ответ 6

Используйте GregorianCalendar.add(Calendar.DATE, 7). Класс GregorianCalendar позаботится о переносе даты в следующий месяц.

Ответ 7

    Date m = new Date();
    Calendar cal = Calendar.getInstance();  
    cal.setTime(m);  
    cal.add(Calendar.DATE, 10); // 10 is the days you want to add or subtract   
    m = cal.getTime();   
    System.out.println(m);

Ответ 8

Date newDate = new Date(current timestamp in millis + 604800000L);//after 7 days