ТЛ; др
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) )
.getYear()
Часовой пояс
Ответ от Раффи Хачадурян мудро показывает, как использовать новый пакет java.time в Java 8. Но этот ответ не решает критическую проблему часового пояса при определении даты.
int year = LocalDate.now (). GetYear ();
Этот код зависит от текущего часового пояса JVM по умолчанию. Зона по умолчанию используется для определения сегодняшней даты. Помните, например, что в момент после полуночи в Париже дата в Монреале все еще «вчера».
Таким образом, ваши результаты могут отличаться в зависимости от того, на какой машине он работает, от пользователя / администратора, меняющего часовой пояс ОС хоста, или от любого кода Java в любой момент , изменяющего текущее значение по умолчанию JVM. Лучше указать часовой пояс.
Кстати, всегда используйте правильные имена часовых поясов как , определенные IANA . Никогда не используйте 3-4-буквенные коды, которые не являются ни стандартизированными, ни уникальными.
java.time
Пример в java.time Java 8.
int year = ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ).getYear() ;
Joda-Time
Некоторая идея, как указано выше, но с использованием библиотеки Joda-Time 2.7.
int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;
Год увеличения / уменьшения
Если ваша цель - прыгать год за раз, нет необходимости извлекать номер года. И Joda-Time, и java.time имеют методы для добавления / вычитания года за раз. И эти методы разумны, они работают с переходом на летнее время и другими аномалиями.
Пример в Joda-Time 2.7.
DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;