Как добавить 7 дней к текущей дате, не переходя в доступные дни месяца? - PullRequest
13 голосов
/ 05 октября 2011

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

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

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

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

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

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

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

Ответы [ 8 ]

30 голосов
/ 05 октября 2011
add(Calendar.DAY_OF_MONTH, 7);

С Календарь JavaDoc

8 голосов
/ 05 октября 2011

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

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

7 голосов
/ 05 октября 2011

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

cal.add(Calendar.DAY_OF_MONTH, 7);
4 голосов
/ 05 октября 2011

cal.add (Calendar.DAY_OF_MONTH, 7);

3 голосов
/ 23 января 2016

tl; dr

LocalDate.now( ZoneId.of( "America/Montreal" ) )  // Today’s 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 для случаев, когда требуется только дата безвремя суток и без часового пояса.Но обратите внимание, что часовой пояс имеет решающее значение при определении текущей даты, поскольку на востоке раньше наступает новый день.

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 Tutorial .И поищите в Stack Overflow множество примеров и объяснений.

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

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


Joda-Time

ОБНОВЛЕНИЕ: проект 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();
2 голосов
/ 06 апреля 2014
    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);
2 голосов
/ 05 октября 2011

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

0 голосов
/ 09 ноября 2017
Date newDate = new Date(current timestamp in millis + 604800000L);//after 7 days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...