문제

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 ) { 
 ...
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top