ThreeTen-Extra
Ответ Виталия Федоренко правильный, описывающий, как выполнить этот расчет современным способом с java.time классами (Duration
& ChronoUnit
) встроен в Java 8 и более поздние версии (и перенесен на Java 6 & 7 и на Android ).
Days
Если вы регулярно используете количество дней в своем коде, вы можете заменить простые целые числа использованием класса. Класс Days
можно найти в проекте ThreeTen-Extra , расширении java.time и полигоне для возможных будущих дополнений к java.time. Класс Days
обеспечивает безопасный тип представления количества дней в вашем приложении. Класс включает в себя удобные константы для ZERO
и ONE
.
Учитывая старые устаревшие java.util.Date
объекты в Вопросе, сначала преобразуйте их в современные java.time.Instant
объекты. Старые классы даты и времени имеют недавно добавленные методы для облегчения преобразования в java.time, такие как java.util.Date::toInstant
.
Instant start = utilDateStart.toInstant(); // Inclusive.
Instant stop = utilDateStop.toInstant(); // Exclusive.
Передайте оба объекта Instant
заводскому методу для org.threeten.extra.Days
.
В текущей реализации (2016-06) это оболочка, вызывающая java.time.temporal.ChronoUnit.DAYS.between
, для подробностей прочтите документ ChronoUnit
class. Для ясности: все заглавные буквы DAYS
находятся в перечислении ChronoUnit
, в то время как initial-cap Days
является классом от ThreeTen-Extra.
Days days = Days.between( start , stop );
Вы можете передавать эти Days
объекты вокруг вашего собственного кода. Вы можете сериализовать строку в стандартный формат ISO 8601 , вызвав toString
. Этот формат PnD
использует P
для обозначения начала, а D
означает «дни» с количеством дней между ними. Классы java.time и ThreeTen-Extra по умолчанию используют эти стандартные форматы при генерации и разборе строк, представляющих значения даты и времени.
String output = days.toString();
P3D
Days days = Days.parse( "P3D" );