java.time
java.time, современный API даты и времени Java, имеет методы для вычисления количества дней между двумя датами.Так что не стоит делать этот расчет самостоятельно.Он подвержен ошибкам.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu H:mm");
String inputDateString = "01-10-2018 23:59";
LocalDate today = LocalDate.now(ZoneId.of("Pacific/Auckland"));
LocalDate expiration = LocalDate.parse(inputDateString, dateFormatter);
if (expiration.isAfter(today)) {
String numberOfDays = "Days left: " + ChronoUnit.DAYS.between(today, expiration);
System.out.println(numberOfDays);
}
Запуск этого фрагмента прямо сейчас (уже 13 сентября в Новой Зеландии) Я получил такой вывод:
Осталось дней: 18
Пожалуйста, замените свой правильный часовой пояс, если это не Pacific / Auckland.
Ответ LaVepe уже хорошо и правильно объяснил, что пошло не так в вашем коде, поэтому я не повторяюсьчто.
Используемые вами классы даты и времени - Calendar
и SimpleDateFormat
- давно устарели и всегда были плохо спроектированы.Есть способ заставить Calendar
считать дни по 1 дню за раз, но он не очень подходит для этого.SimpleDateFormat
печально известен проблемами, которые он вызвал для многих программистов.Я рекомендую вам вообще избегать этих классов и использовать вместо этого java.time.
Вопрос: Можно ли использовать 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
с подпакетами.
Ссылки