Ответ 1
add(Calendar.DAY_OF_MONTH, 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 дней.
add(Calendar.DAY_OF_MONTH, 7);
Метод добавления календаря делает это для вас: 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 года.
Вы должны использовать метод добавления календаря.
cal.add(Calendar.DAY_OF_MONTH, 7);
cal.add(Calendar.DAY_OF_MONTH, 7);
LocalDate.now( ZoneId.of( "America/Montreal" ) ) // Todays date.
.plusWeeks( 1 ) // Yields 'LocalDate' object
.getDayOfMonth() // Yields 'int' number
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 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
и другие.
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();
Используйте GregorianCalendar.add(Calendar.DATE, 7). Класс GregorianCalendar позаботится о переносе даты в следующий месяц.
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);
Date newDate = new Date(current timestamp in millis + 604800000L);//after 7 days