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 클래스는 어디서 구할 수 있습니까?
- 자바 SE 8 , 자바 SE 9 , 자바 SE (10) , 그리고 나중에
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- 대부분의 java.time 기능은 ThreeTen-Backport의 Java 6 & 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스의 최신 버전의 Android 번들 구현.
- 이전 Android (<26)의 경우 ThreeTenABP 프로젝트 는 위에서 언급 한 ThreeTen-Backport를 채택합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .
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부터 시작하므로 결과에 값을 추가해야합니다.