[java] Java : 날짜에서 월 정수 가져 오기

Date 객체 ( java.util.Date) 에서 월을 정수로 얻으려면 어떻게합니까 ?



답변

java.time (자바 8)

Java 8에서 java.time 패키지 를 사용 하여 java.util.Date객체를 객체 로 변환 java.time.LocalDate한 다음 getMonthValue()메소드를 사용할 수도 있습니다.

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int month = localDate.getMonthValue();

월 값은 cal.get(Calendar.MONTH)0에서 11 사이의 값을 제공하는 adarshr의 답변 과 달리 1에서 12 사이 입니다.

그러나 Basil Bourque가 의견에서 말했듯이 선호되는 방법은 메소드 로 Month열거 형 객체 를 얻는 LocalDate::getMonth것입니다.


답변

java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);


답변

Java 8 날짜 API 를 사용하는 경우 한 줄로 직접 얻을 수 있습니다!

LocalDate today = LocalDate.now();
int month = today.getMonthValue();


답변

조다 타임

또는 Joda-Time DateTime 클래스를 사용하십시오.

//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))

…또는…

int month = dateTime.getMonthOfYear();


답변

tl; dr

myUtilDate.toInstant()                          // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC.
          .atZone(                              // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object. 
              ZoneId.of( "America/Montreal" )   // Better to specify desired/expected zone explicitly than rely implicitly on the JVM’s current default time zone.
          )                                     // Returns a `ZonedDateTime` object.
          .getMonthValue()                      // Extract a month number. Returns a `int` number.

java.time 세부

도움말 사용 Ortomala Lokni에 의해 java.time은 올바른 것입니다. 그리고 이전 java.util.Date/.Calendar 클래스보다 크게 개선 된 java.time 을 사용해야 합니다. java.time 의 Oracle Tutorial 을 참조하십시오 .

새로운 코드로 시작할 때 java.util.Date에 관계없이 java.time을 사용하는 방법을 보여주는 코드를 추가하겠습니다.

간단히 말해서 java.time 사용… An Instant은 타임 라인의 순간입니다 (UTC). 시간대 ( ZoneId)를 적용하여을 가져옵니다 ZonedDateTime.

Month수업은 일반적으로 한 달을 나타내는 정교한 열거 형 입니다. 그 열거 형은 현지화 된 이름을 얻는 것과 같은 편리한 방법을 가지고 있습니다. 그리고 java.time의 월 번호는 java.util.Date/.Calendar에있는 0부터 시작하는 넌센스 (0-11)가 아니라 1-12 인 제정신입니다.

현재 날짜-시간을 얻으려면 시간대 가 중요합니다. 언제든 날짜는 전 세계에서 동일 하지 않습니다 . 따라서 월말 / 시작일이 가까워지면 월이 전 세계에서 동일하지 않습니다.

ZoneId zoneId = ZoneId.of( "America/Montreal" );  // Or 'ZoneOffset.UTC'.
ZonedDateTime now = ZonedDateTime.now( zoneId );
Month month = now.getMonth();
int monthNumber = month.getValue(); // Answer to the Question.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );

java.time에 대하여

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.

java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이 필요없고 수업이 필요 없습니다 .java.sql.*

java.time 클래스는 어디서 구할 수 있습니까?

ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .


답변

Joda 시간을 사용할 수없고 여전히 어두운 세상에 살고 있다면 🙂 (Java 5 이하) 이것을 즐길 수 있습니다 :

참고 : 날짜가 모두 dd / MM / YYYY 형식으로되어 있는지 확인하십시오.

/**
Make an int Month from a date
*/
public static int getMonthInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
    return Integer.parseInt(dateFormat.format(date));
}

/**
Make an int Year from a date
*/
public static int getYearInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
    return Integer.parseInt(dateFormat.format(date));
}


답변

Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1

반환 된 값은 0부터 시작하므로 결과에 값을 추가해야합니다.