Дата арифметики на Java, добавление 3 месяца с сегодняшнего дня - PullRequest
8 голосов
/ 05 апреля 2009

Моя программа о создании (производстве) Kurosawa и о том, чтобы клиенты производили его.

Каждый раз, когда мы генерируем Kurosawa, мы должны напечатать его идентификатор, дату производства и срок годности, который составляет 3 месяца с даты производства.

Моя проблема: Как рассчитать дату через 3 месяца?

Ответы [ 6 ]

15 голосов
/ 05 апреля 2009

Используйте встроенный Java Calendar API .

Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 3);

Обратитесь к API, чтобы точно узнать, как распечатать дату в нужном формате.

9 голосов
/ 05 апреля 2009

Вы также можете использовать гораздо более мощный и простой в использовании Joda Time Library :

DateMidnight productionDate = new DateMidnight();
DateMidnight expirationDate = productionDate.plusMonths(3);
System.out.println(expirationDate.toString("dd.MM.yyyy"));

Joda Time имеет много преимуществ по сравнению со встроенным Java Calendar API.

2 голосов
/ 26 января 2018

ТЛ; др

LocalDate.now()            // Determine today’s date.
         .plusMonths( 3 )  // Add three months.

java.time

Современный подход использует java.time классы.

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

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

Если часовой пояс не указан, JVM неявно применяет свой текущий часовой пояс по умолчанию. Это значение по умолчанию может измениться в любой момент, поэтому ваши результаты могут отличаться. Лучше явно указать желаемый / ожидаемый часовой пояс в качестве аргумента.

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

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

Добавьте три месяца, чтобы java.time вычислил.

LocalDate threeMonthsLater = today.plusMonths( 3 ) ;

О java.time

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

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

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

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

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

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

2 голосов
/ 05 апреля 2009

Я считаю, что Java Calendar Library должна помочь вам.

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

/ Класс java Calendar является абстрактным. Поэтому вам нужно использовать класс GregorianCalendar. /

java.util.GregorianCalendar gC = new java.util.GregorianCalendar();

java.util.Date yourDate = new java.util.Date();
gC.setTime(yourDate);

/ Добавить 3 месяца /

gC.add(java.util.Calendar.MONTH_OF_YEAR, 3);

/ чтобы вернуться на 1 неделю /

gC.add(java.util.Calendar.WEEK_OF_YEAR, -1);
0 голосов
/ 05 апреля 2009

Если вам нужно работать с арифметикой дат, JODA работает лучше, так как Calendar любит метки времени.

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