programing

Java에서 현재 연도의 정수 값을 가져옵니다.

itsource 2022. 8. 14. 10:48
반응형

Java에서 현재 연도의 정수 값을 가져옵니다.

자바에서 올해를 정수로 정해야 합니다.난 그냥...java.util.Date()단, 권장되지 않습니다.

int year = Calendar.getInstance().get(Calendar.YEAR);

이것이 새 달력을 설정하지 않는 기준에 부합하는지 확실하지 않습니까?(왜 반대합니까?)

Java 8의 시간 API를 사용하면(시스템 기본 시간대에서 연도를 얻는 것이 좋다고 가정하면) 다음 방법을 사용할 수 있습니다.

int year = Year.now().getValue();

가장 간단한 방법(Calendar 사용, 죄송합니다)은 다음과 같습니다.

 int year = Calendar.getInstance().get(Calendar.YEAR);

Joda Time뿐만 아니라 새로운 Date and Time API JSR도 있습니다.

다음 두 가지 방법을 사용할 수도 있습니다.java.time.YearMonth(Java 8 이후):

import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();

dr;dr

ZonedDateTime.now(  ZoneId.of( "Africa/Casablanca" )  )
             .getYear()

시간대

Raffi Kachadourian답변은 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년을 추가/감산하는 메서드가 있습니다.그리고 이러한 방법은 일광 절약 시간제 및 기타 이상 현상을 처리하는 데 있어 현명합니다.

java.time의 예.

ZonedDateTime zdt = 
    ZonedDateTime
    .now(  ZoneId.of( "Africa/Casablanca" )  )
    .minusYears( 1 ) 
;

Joda-Time 2.7의 예.

DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;

가장 쉬운 방법은 달력에서 연도를 얻는 것입니다.

// 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 8에는 다음 코드를 사용합니다.

LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int date = localDate.getDayOfMonth();

Java 8 을 사용할 수도 있습니다.

import java.time.LocalDate;
//...
int year = LocalDate.now().getYear();

응용 프로그램에서 날짜 및 달력 개체를 많이 사용하는 경우 Joda 시간을 사용해야 합니다.java.util.Date가변성이 있습니다. java.util.Calendar필드 갱신 시 퍼포먼스 문제가 발생하여 datetime 산술에 적합하지 않습니다.

위의 답변과 같이:

나중에 변수를 사용할 경우 다음을 사용하는 것이 좋습니다.

int year;

year = Calendar.getInstance().get(Calendar.YEAR);

조건만으로 연도가 필요한 경우 다음을 사용하는 것이 좋습니다.

Calendar.getInstance().get(Calendar.YEAR)

예를 들어, 도입된 체크가 현재 연도 200 이상 또는 현재 연도(생년월일 수 있음)보다 클 때 Do에 사용합니다.

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));
}

제 경우 위의 어느 것도 작동하지 않습니다.그래서 여러 가지 방법을 시도해 본 결과, 아래의 방법을 찾았는데 효과가 있었습니다.

import java.util.Scanner;
import java.util.Date;

public class Practice
{   
    public static void main(String[] args)
    {
        Date d=new Date();  
        int year=d.getYear();
        int currentYear=year+1900;    

        System.out.println(currentYear);

    }

}

달력을 인스턴스화할 필요 없이 정수 연산을 사용하여 모든 작업을 수행할 수 있습니다.

return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);

새해에 한두 시간 쉬어도 문제될 것 같은 느낌이 안 드나요?

Java 버전 8+에서는 java.time 라이브러리를 사용할 수 있습니다(권장).ISO 8601은 표준 날짜 작성 방법을 설정합니다.YYYY-MM-DD ★★★★★★★★★★★★★★★★★」java.time.Instant(「」의 경우)UTC

import java.time.Instant;
int myYear = Integer.parseInt(Instant.now().toString().substring(0,4));

을 위해 (및 get의 : get의 줄임말)String 아니라, 이에요.int를 사용합니다.Calendar외관도 좋아지고 존 인식도 가능해집니다.

라이브러리의 특수 기능을 사용하여 일/월/년 단위로 작업합니다.

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 ) { 
 ...
}

언급URL : https://stackoverflow.com/questions/136419/get-integer-value-of-the-current-year-in-java

반응형