Java의 현재 연도를 정수로 결정해야합니다. 그냥 사용할 java.util.Date()
수는 있지만 더 이상 사용되지 않습니다.
답변
int year = Calendar.getInstance().get(Calendar.YEAR);
새 캘린더를 설정하지 않은 기준에 맞는지 확실하지 않습니까? (왜 반대 하는가?)
답변
Java 8의 시간 API를 사용하여 (시스템의 기본 시간대에서 연도를 얻는 것이 좋다고 가정) 다음 Year::now
방법을 사용할 수 있습니다 .
int year = Year.now().getValue();
답변
가장 간단한 (캘린더 사용, 미안)는 다음과 같습니다.
int year = Calendar.getInstance().get(Calendar.YEAR);
Joda Time 뿐만 아니라 새로운 Date and Time API JSR 도 있습니다.
답변
가장 쉬운 방법은 달력에서 연도를 얻는 것입니다.
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
답변
java.time.YearMonth
(Java 8 이후) 에서 두 가지 방법을 사용할 수도 있습니다 .
import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
답변
날짜 객체의 연도를 원하면 다음 방법을 사용했습니다.
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;
}
답변
tl; dr
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) )
.getYear()
시간대
Raffi Khatchadourian 의 대답 은 현명하게 Java 8에서 새로운 java.time 패키지 를 사용하는 방법을 보여줍니다. 그러나 그 대답은 날짜를 결정할 때 시간대의 중요한 문제를 해결하지 못합니다.
int year = LocalDate.now (). getYear ();
이 코드는 JVM의 현재 기본 시간대에 따라 다릅니다. 기본 영역은 오늘 날짜를 결정하는 데 사용됩니다. 예를 들어 파리 자정이 지나면 몬트리올의 날짜는 여전히 ‘어제’입니다.
따라서 결과는 실행되는 시스템, 호스트 OS 시간대를 변경하는 사용자 / 관리자 또는 JVM의 현재 기본값을 변경하는 Java 코드 에 따라 달라질 수 있습니다 . 시간대를 지정하는 것이 좋습니다.
그건 그렇고, 항상 IANA에 의해 정의 된 올바른 시간대 이름 을 사용 하십시오 . 표준화되거나 고유하지 않은 3-4 자 코드를 사용하지 마십시오.
java.time
Java 8의 java.time 예제
int year = ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ).getYear() ;
조다 타임
위와 같은 아이디어이지만 Joda-Time 2.7 라이브러리를 사용합니다.
int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;
증가 / 감소 연도
목표가 한 번에 1 년마다 점프하는 것이라면 연도 번호를 추출 할 필요가 없습니다. Joda-Time과 java.time에는 한 번에 1 년을 더하거나 빼는 방법이 있습니다. 그리고 이러한 방법은 일광 절약 시간 및 기타 이상을 처리하는 것이 현명합니다.
Joda-Time의 예 2.7.
DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;