Вычитание месяцев в Java

Я использую две строковые переменные для хранения двух разных дат. Даты хранятся в этом формате (28 мая 2019 г.), и мне нужно найти разницу в месяцах. Я не могу понять, нужно ли мне сначала преобразовать эти даты в другой формат, прежде чем выполнять вычитание.

Я использую getText(), чтобы получить эти даты из следующего места //span[@class='expiry_date']

Что вы пробовали? Вы смотрели на классы java.time?

Roddy of the Frozen Peas 28.05.2019 17:45

Проверьте это: stackoverflow.com/questions/51999145/…

Lungu Daniel 28.05.2019 17:50

Дубликат этого stackoverflow.com/questions/13037654/subtract-two-dates-in-j‌​ava

hfontanez 28.05.2019 18:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
3
101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать класс DateFormat для преобразования вашего String в объект Date. Самый простой способ выполнить сложение или вычитание — использовать класс Calendar. Вы можете преобразовать объект Date в объект Calendar и выполнить расчет. Имейте в виду, что объект Calendar не будет хранить информацию о времени, но, похоже, это не проблема с вашей проблемой.

Ответ принят как подходящий

Самый простой подход — использовать метод ChronoUnit#between:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MMMM dd, yyyy", Locale.US );
LocalDate d1 = LocalDate.parse( "May 28, 2019", formatter );
LocalDate d2 = LocalDate.parse( "September 02, 2020", formatter );

long diff = ChronoUnit.MONTHS.between( d1, d2 );   // 15 full months

Спасибо, это сработало!

Shavaiz Safdar 28.05.2019 18:58

Приходя к тому, что вы дали Чтобы выяснить, нужно ли вам сначала преобразовать эти даты в другой формат, прежде чем выполнять вычитание. Лучший подход, который вы должны использовать, это сначала преобразовать даты в Java 8 LocalDate, а затем найти разницу

Вот пример кода, который может вам помочь, несмотря на то, что вы не продемонстрировали свои усилия с кодом.

    DateTimeFormatter customFormatter= DateTimeFormatter.ofPattern( "MMMM dd, yyyy",Locale.US);

    LocalDate date1 = LocalDate.parse( "April 01, 2019", customFormatter );
    LocalDate date2 = LocalDate.parse( "October 01, 2019", customFormatter );


    Period dateDifference = Period.between(date1, date2);
    System.out.println(dateDifference.toTotalMonths());

Вы всегда должны определять локаль при работе с данными, зависящими от языка (например, названиями месяцев). Ваш фрагмент не будет работать, если он будет работать под JVM с другой конфигурацией.

Alex Salauyou 28.05.2019 20:01

Другие вопросы по теме