tl;dr
java.time.Period.between( startLocalDate , stopLocalDate )
Java.время
принятый ответ от Modus Tollens верен.
К вашему сведению, проект Joda-Time теперь находится в режим обслуживания, при этом команда рекомендует перейти на java.time. См. учебник Oracle.
Вот современная версия вашего кода.
Анализ ваших заданных строк как OffsetDateTime
, поскольку они включают смещение от UTC, но не полный часовой пояс.
OffsetDateTime start = OffsetDateTime.parse( "2014-05-28T00:00:00.000+05:30" ) ;
Лучше использовать часовой пояс, чем смещение, если оно известно.
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime start = LocalDate.parse( "2014-05-28" ).atStartOfDay( z ) ;
Если вы действительно хотите работать только с датой, а не с датой и временем, используйте класс LocalDate
.
LocalDate start = LocalDate.parse( "2014-05-28" ) ;
Вы можете извлечь только дату LocalDate
из OffsetDateTime
или ZonedDateTime
, вызвав toLocalDate
.
Представьте промежуток времени, который вы хотите перепрыгнуть, используя Period
класс.
Period p = Period.ofMonths( 9 ).plus( Period.ofDays( 12 ) ) ;
Убедитесь, что значение, сгенерировав строку, соответствует стандартному формату ISO 8601.
String pOutput = p.toString() ;
P9M12D
Добавьте период к начальной дате или дате-времени.
LocalDate later = start.plus( p ) ; // Add the `Period` span-of-time to our starting date.
Чтобы рассчитать прошедшее время, используйте Period.between
.
Period p = Period.between( startLocalDate , stopLocalDate ) ;
О java.time
java.time встроена в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.
Чтобы узнать больше, см. Учебное пособие по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.
Где получить классы java.time?
person
Basil Bourque
schedule
02.02.2018