Я использую две строковые переменные для хранения двух разных дат. Даты хранятся в этом формате (28 мая 2019 г.), и мне нужно найти разницу в месяцах. Я не могу понять, нужно ли мне сначала преобразовать эти даты в другой формат, прежде чем выполнять вычитание.
Я использую getText(), чтобы получить эти даты из следующего места //span[@class='expiry_date']
Проверьте это: stackoverflow.com/questions/51999145/…
Дубликат этого stackoverflow.com/questions/13037654/subtract-two-dates-in-java
Вы можете использовать класс 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
Спасибо, это сработало!
Приходя к тому, что вы дали Чтобы выяснить, нужно ли вам сначала преобразовать эти даты в другой формат, прежде чем выполнять вычитание. Лучший подход, который вы должны использовать, это сначала преобразовать даты в 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 с другой конфигурацией.
Что вы пробовали? Вы смотрели на классы java.time?