java.time и ThreeTenABP
Извините, я могу написать это только на Java. Пожалуйста, переведите себя. Лучше всего решить вашу задачу с помощью java.time, современного Java-API даты и времени.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
LocalDate date = LocalDate.now(ZoneId.of("Europe/London")).plusMonths(14);
String result = date.format(dateFormatter);
System.out.println("Result: " + result);
Вывод при запуске сегодня:
Результат: 22-12-2020
Исправление вашего кода
Если вы настаиваете на использовании заведомо хлопотного и давно устаревшего класса SimpleDateFormat
, просто удалите .format(this)
из своего кода. Бьюсь об заклад, исключение исходит оттуда, и это неправильно, поскольку у вас есть почти правильный вызов метода format
в следующей строке.
private fun bestBeforeDate(cal: Calendar = Calendar.getInstance()): String
{
cal.add(Calendar.MONTH, 14)
val format1 = SimpleDateFormat("dd-MM-yyyy")
return getString(R.string.best_before_date) + format1.format(cal.time)
}
Метод format
ожидает либо Date
(еще один плохо спроектированный и давно устаревший класс) или Long
. Поскольку this
не было ни одного из них, вы получили исключение.
Вопрос: Разве java.time не требует Android API уровня 26?
java.time прекрасно работает как на старых, так и на новыхУстройства Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26) современный API поставляется встроенным.
- В не-Android Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется Androidиздание ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки