Мне нужно определить текущий год в Java как целое число. Я мог бы просто использовать java.util.Date()
, но это устарело.
Получить целочисленное значение текущего года в Java
Ответ 1
int year = Calendar.getInstance().get(Calendar.YEAR);
Не уверен, соответствует ли это критериям отсутствия нового Календаря? (Почему оппозиция так поступает?)
Ответ 2
Используя Java 8 time API (предполагая, что вы счастливы получить год в часовой пояс вашей системы по умолчанию), вы можете использовать метод Year::now
:
int year = Year.now().getValue();
Ответ 3
Этот простейший (используя Calendar, извините):
int year = Calendar.getInstance().get(Calendar.YEAR);
Существует также новый API дат и времени JSR, а также Время в Джоде
Ответ 4
Самый простой способ - получить год из Календаря.
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
Ответ 5
Вы также можете использовать 2 метода из java.time.YearMonth
(Начиная с Java 8):
import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
Ответ 6
Если вы хотите год любого объекта даты, я использовал следующий метод:
public static int getYearFromDate(Date date) {
int result = -1;
if (date != null) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
result = cal.get(Calendar.YEAR);
}
return result;
}
Ответ 7
ТЛ; др
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 времени
Некоторая идея, как указано выше, но с использованием библиотеки 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 ) ;
Ответ 8
Если ваше приложение активно использует объекты Date и Calendar, вам действительно нужно использовать Joda Time, потому что java.util.Date
изменен. java.util.Calendar
имеет проблемы с производительностью при обновлении полей и неудобен для арифметики datetime.
Ответ 9
Как некоторые люди ответили выше:
Если вы хотите использовать переменную позже, лучше используйте:
int year;
year = Calendar.getInstance().get(Calendar.YEAR);
Если вам нужен год только для того, что вам лучше использовать:
Calendar.getInstance().get(Calendar.YEAR)
Например, используя его в do, в то время как проверенные введенные год не меньше, чем текущий год -200 или больше, чем в текущем году (может быть год рождения):
import java.util.Calendar;
import java.util.Scanner;
public static void main (String[] args){
Scanner scannernumber = new Scanner(System.in);
int year;
/*Checks that the year is not higher than the current year, and not less than the current year - 200 years.*/
do{
System.out.print("Year (Between "+((Calendar.getInstance().get(Calendar.YEAR))-200)+" and "+Calendar.getInstance().get(Calendar.YEAR)+") : ");
year = scannernumber.nextInt();
}while(year < ((Calendar.getInstance().get(Calendar.YEAR))-200) || year > Calendar.getInstance().get(Calendar.YEAR));
}
Ответ 10
Вы также можете использовать Java 8 LocalDate
:
import java.time.LocalDate;
//...
int year = LocalDate.now().getYear();
Ответ 11
Что я использовал, простой и простой способ
Integer currentYear = gregorianDate.getYear();
Integer comeupYear = currentYear+1;
Integer previousYear = currentYear-1;
Ответ 12
Используйте следующий код для Java 8:
LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int date = localDate.getDayOfMonth();
Ответ 13
Вы можете сделать все это с помощью математики Integer без необходимости создания экземпляра календаря:
return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);
Может быть, на час или два на новый год, но у меня не сложилось впечатление, что это проблема?
Ответ 14
Я использую специальные функции в своей библиотеке для работы с днями/месяцами/годами ints -
int[] int_dmy( long timestamp ) // remember month is [0..11] !!!
{
Calendar cal = new GregorianCalendar(); cal.setTimeInMillis( timestamp );
return new int[] {
cal.get( Calendar.DATE ), cal.get( Calendar.MONTH ), cal.get( Calendar.YEAR )
};
};
int[] int_dmy( Date d ) {
...
}