Изменить неделю в календаре - PullRequest
2 голосов
/ 12 марта 2012

Здравствуйте, я использую Calendar в Java

Я хочу изменить значение моего календаря и получить следующую / предыдущую неделю.

Я пытался

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, cal.DATE-7);

Но это странно

Ответы [ 4 ]

4 голосов
/ 12 марта 2012

Вы пробовали (скопировано / вставлено из javadoc ):

cal.add(Calendar.DAY_OF_MONTH, -7);
2 голосов
/ 12 марта 2012

Вместо этого вы должны использовать что-то вроде следующего:

c.add(Calendar.WEEK_OF_YEAR, -1);

Ваш код полностью неверен. cal.DATE-7 не означает «7 дней до сегодняшнего дня». Calendar.DATE это просто константа, которая определяет тип поля для Calendar.

1 голос
/ 26 февраля 2017

tl; dr

На следующей неделе.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .plusWeeks( 1L )

На прошлой неделе.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .minusWeeks( 1L )

Использование java.time

Современный способс классами java.time, которые вытесняют старые классы, такие как Calendar & Date.

LocalDate

Класс LocalDate представляет значение только для даты без времени суток и без часового пояса.

Aчасовой пояс имеет решающее значение при определении даты.В любой момент времени дата меняется по всему земному шару в зависимости от зоны.Например, через несколько минут после полуночи в Париж Франция - это новый день, в то время как "вчера" в Монреаль Квебек .

Укажите правильный часовой поясимя в формате continent/region, например America/Montreal, Africa/Casablanca или Pacific/Auckland.Никогда не используйте 3-4-буквенное сокращение, например EST или IST, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

Добавить / вычесть недели

Добавить или вычесть недели с LocalDate легко.Вызовите методы plusWeeks или minusWeeks.

LocalDate nextWeek = today.plusWeeks( 1L );
LocalDate lastWeek = today.minusWeeks( 1L );

О java.time

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

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

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Где получить классы java.time?

  • Java SE 8 и SE 9 и более поздних версий
    • Встроенный,
    • Часть стандартного Java API с встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android

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

0 голосов
/ 12 марта 2012

Вам нужно будет сделать что-то вроде этого:

public static void main(String[] args) {

    Calendar cal = Calendar.getInstance();
    System.out.println(cal.getTime());
    cal.set(Calendar.WEEK_OF_YEAR, cal.get(Calendar.WEEK_OF_YEAR)-1);
    System.out.println(cal.getTime());
} 

Надеюсь, это помогло, повеселиться!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...