tl;dr
Используйте современные классы java.time. Можно сделать в один лайнер (не то, чтобы я рекомендовал это).
Period
.between(
( ( GregorianCalendar) myCalendarExpiration ).toZonedDateTime().toLocalDate() ,
ZonedDateTime.now( ZoneId.of( "Asia/Kolkata" ) ).plusYears( 10 ).toLocalDate()
)
.getYears()
java.время
Современный подход использует классы java.time, которые заменили устаревшие классы даты и времени, такие как Calendar.
Обычной конкретной реализацией Calendar является GregorianCalendar. Теперь это заменено на ZonedDateTime. Вы можете конвертировать туда и обратно, вызывая новые методы в старых классах.
ZonedDateTime zdtExpiration = ( ( GregorianCalendar) myCal ).toZonedDateTime() ;
Получить текущий момент.
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdtNow = ZonedDateTime.now( z ) ;
Добавьте десять лет.
ZonedDateTime zdtLater = zdtNow.plusYears( 10 ) ;
Рассчитайте время, прошедшее в годах между датами этих двух моментов.
Period p = Period.between(
zdtExpiration.toLocalDate() ,
zdtLater.toLocalDate()
) ;
Опросите количество полных лет.
int yearsElapsed = p.getYears() ;
О java.time
< Платформа em>java.time встроена в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и SimpleDateFormat.
Чтобы узнать больше, см. Учебное пособие по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.
Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.
Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. . Этот проект является испытательным полигоном для возможных дополнений к java.time в будущем. Здесь вы можете найти несколько полезных классов, таких как Interval a>, YearWeek, YearQuarter и подробнее.
person
Basil Bourque
schedule
23.11.2019