java.time
Это не совсем понятно из вопроса, но я думаю, что вы пытались сделать что-то вроде следующего:
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
List<String> dates = Arrays.asList("31/05/2018", "19/06/2018", "01/07/2018");
String dateIns = dates.get(0);
dateIns = dateIns.replaceAll("\n", "");
LocalDate todayDate = LocalDate.now(ZoneId.of("Pacific/Rarotonga"));
LocalDate deadline = LocalDate.parse(dateIns, dateFormatter).minusWeeks(1);
if (todayDate.isBefore(deadline)) {
System.out.println("I Love My Car. Краен срок! Изтичащ преглед.");
}
Запуск этого фрагмента только сейчас, начиная с 19-гоМай строго до 24 мая, на нем напечатано
I Love My Car.Краен срок!Изтичащ преглед.
Пожалуйста, замените желаемый часовой пояс, если это не Тихий / Раротонга.
Я использую и рекомендую java.time
, современную дату на Java ивремя API.A LocalDate
- это дата без времени суток, которая, кажется, подходит именно вам.И с java.time
гораздо приятнее работать, чем с Date
и SimpleDateFormat
, которые давно устарели, и, в частности, SimpleDateFormat
, как известно, хлопотно.
Если вы используете хотя бы Java 8или Android API уровня 26 или выше, вы должны убедиться, что у вас есть драйвер, совместимый с JDBC 4.2, и затем извлекать LocalDate
объекты, а не строки из вашей базы данных.Таким образом, вы свободны от любого анализа строк в вашем коде, это не только проще, но и менее подвержено ошибкам.
Что пошло не так в вашем коде?
Iсчитаю, что проблема заключается в этой строке:
deadline = sdf.parse(sdf.format(dateIns));
Здесь dateIns
является String
.Не имеет смысла форматировать что-то, что уже является строкой, и SimpleDateFormat
не может этого сделать и поэтому выдает исключение, которое вы получили.Вы бы предпочли и, возможно, ожидали сообщение об ошибке во время компиляции при передаче неправильного типа в метод format
.SimpleDateFormat
наследует метод format(Date)
от DateFormat
, но также метод format(Object)
от Format
.Так что с String
последний вызывается, и компилятор не может сказать, что что-то не так.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time
прекрасно работает на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26, как мне сказали), современный API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. ссылки внизу).
- На (более старом) использовании AndroidAndroid-версия ThreeTen Backport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки