Date 객체 ( java.util.Date
) 에서 월을 정수로 얻으려면 어떻게합니까 ?
Date 객체 ( java.util.Date
) 에서 월을 정수로 얻으려면 어떻게합니까 ?
답변:
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
것입니다.
ZoneId.of( "America/Montreal" )
.
Month
열거 형 객체를 얻을 수도 있습니다 . 방법을 Month m = localDate.gotMonth();
참조하십시오 LocalDate::getMonth
. 이와 같은 객체를 사용하면 코드를 자체 문서화하고 형식 안전성을 보장하며 유효한 값을 보장 할 수 있습니다. Oracle의 Enum tutorial 을 참조하십시오 .
date.toInstant()
하고 java.sql.Date
(의 자식 java.util.Date
) 과 함께 일하는 경우을 얻습니다 UnsupportedOperationException
. Trynew java.sql.Date(src.getTime()).toLocalDate()
java.sql.Date
이전 클래스에 추가 된 새로운 변환 방법을 사용하여 훨씬 쉽게 변환 할 수 있습니다. java.sql.Date.valueOf( myLocalDate )
그리고 myJavaSqlDate.toLocalDate()
또한, JDBC 드라이버는 JDBC 4.2 업데이트 이후 더 이상 필요하지 않은 java.sql
유형을 할 수 있습니다 직접 주소 java.time
유형 바이어 ResultSet::getObject
및 PreparedStatement::setObject
방법.
java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
Calendar.MONTH
명백한 이유이다는 즉 1월 == 0, 0부터. 이제 API에 잘 설명되어 있지만 처음 사용자에게는 여전히 혼란 스럽습니다. : 어쩌면 시간을 새로운 SO 질문 나 자신을 위해 (/ I 두려워하지만 그 어떤 좋은 배경이없는) - 나는 그들이 그와 함께 갔다 이유를 말해 줄 수있는 사람이 찾아 아직했습니다
getYear()
는 또한 "명백한 이유도없이"1900 년을 뺀 것입니다.
또는 Joda-Time DateTime
클래스를 사용하십시오.
//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))
…또는…
int month = dateTime.getMonthOfYear();
DateTime
객체의 월을 요청하십시오 . int month = dateTime.getMonthOfYear();
.toString("MM")
단지 "MM"보다 더 많은 가능성이 있음을 보여줍니다.
DateTimeZone
해당 DateTime 생성자에 객체를 전달하는 것이 좋습니다 DateTimeZone.forID( "America/Montreal" )
.
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의 프레임 워크는 나중에 자바 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부터 시작하므로 결과에 값을 추가해야합니다.
new Date()
없이 수행함으로써 현재 시간으로 날짜를 만들 수 있다는 것 System.currentTimeMillis
입니다. 다른 하나는 getMonth가 더 이상 사용되지 않는다는 것입니다.