Java에서 현재 연도의 정수 가치를 얻으십시오
문제
Java의 현재 연도를 정수로 결정해야합니다. 그냥 사용할 수있었습니다 java.util.Date()
, 그러나 더 이상 사용되지 않습니다.
해결책
int year = Calendar.getInstance().get(Calendar.YEAR);
이것이 새 캘린더를 설정하지 않는 기준을 충족하는지 확실하지 않습니까? (왜 그렇게하는 것에 대한 반대?)
다른 팁
Java 8 's Time API 사용 (시스템의 기본 시간 영역에서 연도를 기꺼이받는 것이 기쁘다 고 가정 함) 그만큼 Year::now
방법:
int year = Year.now().getValue();
이 가장 간단한 (캘린더 사용, 죄송합니다)는 다음과 같습니다.
int year = Calendar.getInstance().get(Calendar.YEAR);
새로운 것도 있습니다 날짜 및 시간 API JSR, 만큼 잘 조다 시간
가장 쉬운 방법은 달력에서 해를 얻는 것입니다.
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
날짜 객체의 연도를 원한다면 다음 방법을 사용했습니다.
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;
}
두 가지 방법을 사용할 수도 있습니다 java.time.YearMonth
(Java 8 이후) :
import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
tl; dr
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) )
.getYear()
시간대
대답 ~에 의해 Raffi Khatchadourian 현명하게 새로 사용하는 방법을 보여줍니다 Java.Time 패키지 Java 8에서는 그 답변이 날짜를 결정할 때 시간대의 중요한 문제를 해결하지 못합니다.
int 년 = localdate.now (). getyear ();
이 코드는 JVM의 현재 기본 시간대에 따라 다릅니다. 기본 영역은 오늘의 날짜가 무엇인지 결정하는 데 사용됩니다. 예를 들어, 파리에서 자정 이후의 순간 몬트리올의 날짜는 여전히 '어제'라는 것을 기억하십시오.
따라서 결과가 실행되는 기계, 호스트 OS 시간대 변경 사용자/관리자 또는 Java 코드에 따라 결과가 다를 수 있습니다. 언제든지 JVM의 현재 기본값 변경 시간대를 지정하는 것이 좋습니다.
그건 그렇고, 항상 사용하십시오 적절한 시간대 이름 ~처럼 Iana에 의해 정의되었습니다. 표준화되거나 독특하지 않은 3-4 글자 코드를 사용하지 마십시오.
Java.Time
Java의 Java 8의 예. 8.
int year = ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ).getYear() ;
조다-시간
위와 같은 아이디어이지만 사용 조다-시간 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 ) ;
응용 프로그램이 날짜와 달력 개체를 많이 사용하는 경우 실제로 Joda Time을 사용해야합니다. java.util.Date
변이 가능합니다. java.util.Calendar
필드가 업데이트 될 때 성능 문제가 있으며 DateTime 산술에 대해 어리 석습니다.
Java 8을 사용할 수도 있습니다 LocalDate
:
import java.time.LocalDate;
//...
int year = LocalDate.now().getYear();
어떤 사람들은 위에서 대답했듯이 :
나중에 변수를 사용하려면 더 잘 사용하십시오.
int year;
year = Calendar.getInstance().get(Calendar.YEAR);
조건 만 있으면 연도가 필요한 경우 더 잘 사용합니다.
Calendar.getInstance().get(Calendar.YEAR)
예를 들어, 도입 된 수표가 현재 연도보다 현재 연도 (출생 연도가 될 수 있음)보다 더 이상 사용하는 동안 다음과 같이 사용합니다.
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));
}
달력을 인스턴스화 할 필요없이 정수 수학을 사용하여 모든 일을 할 수 있습니다.
return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);
새해에 한두 시간 동안 꺼져있을 수 있지만 문제가되는 인상을받지 못합니까?
내 라이브러리에서 특별 기능을 사용하여 Days/Month/Year 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 ) {
...
}