문제
내가 사용하려고 다음과 같은 코드만의 반환하는 잘못된 날짜.
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.set(Calendar.MONTH, sampleDay.get(Calendar.MONTH)+1);
cal.set(Calendar.DAY_OF_MONTH, 0);
return cal.getTime();
해결책
의 수를 얻을 일에 대한 이번 달:
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
int noOfLastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
설정의 일정을 마지막 날이 한 달:
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
다른 팁
내가 만드는 날짜 객체에 대한 첫 번째 날의 다음달,그리고 다 빼일 날짜로부터 개체입니다.
tl;박사
YearMonth.from(
LocalDate.now( ZoneId.of( "America/Montreal" ) )
).atEndOfMonth()
java.시간
질문과 다른 답변을 오래 사용하는 시대에 뒤떨어진다.그들은 대체 java.시간 클래스 내장으로 Java8 니다.보 Oracle 튜토리얼.의 많은 기능을 다시 체험하 Java6&7 ThreeTen-백 포트 고 더 적응을 안드로이드 ThreeTenABP.
LocalDate
이 LocalDate
클래스를 나타내는 날짜만 값없이 시간과 시간이없는 영역입니다.이러한 객체 저장 시간대,시간 영역을 결정하는 중요한 현재 날짜입니다.모든 주어진 순간에 날짜까지 다양하는 전세계하여 시간 영역입니다.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId ); // 2016-06-25
YearMonth
결과 YearMonth
클래스를 확인의 마지막 날은 어떤 달입니다.
YearMonth currentYearMonth = YearMonth.from( today ); // 2016-06
LocalDate lastDayOfCurrentYearMonth = currentYearMonth.atEndOfMonth(); // 2016-06-30
에 의해 방법을 모두 LocalDate
고 YearMonth
사용 달 번호는 당신이 기대하는 것처럼(1-12)보다는 스크루 0-11 에서 볼 수 오래된 날짜간 클래스입니다.중 하나 많은 가난한 디자인 결정을 내는 그 오래된 날짜간 클래스에서는 번잡하고 혼란스럽습니다.
TemporalAdjuster
또 다른 유효한 접근 방식은 사용 TemporalAdjuster
.보 올바른 대답하여 피에르 헨리.
사용 calObject.getActualMaximum(calobject.DAY_OF_MONTH)
보 실제의 Java 방법 더 많은 정보를 원합니다.
그것은 다음과 같이 설정할 일정하는 첫 번째 날의 다음달,그래서 당신은 하나가 필요 더 많은 라인을 빼는 하루를 얻으려면,마지막 날은 달의 sampleDay 에서는:
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.roll(Calendar.MONTH, true);
cal.set(Calendar.DAY_OF_MONTH, 0);
cal.add(Calendar.DAY_OF_MONTH, -1);
일반적으로,그것은 훨씬 쉽게 이런 종류의 것 사용 시간 Joda, 예를 들어:
DateTime date = new DateTime(sampleDay.getTime());
return date.plusMonths(1).withDayOfMonth(0).minusDays(1).getMillis();
TemporalAdjuster
를 사용하여(상대적으로) 새로운 Java 날짜 API,그것은 실제로 매우 쉽습니다:
자 date
야의 인스턴스 LocalDate
, 예를 들어:
LocalDate date = LocalDate.of(2018, 1, 22);
나
LocalDate date = LocalDate.now();
거나,물론 당신은 그것을 얻을 수 있으로 사용자 입력,데이터베이스에서,등등.
적용 후의 구현 TemporalAdjuster
인터페이스에서 찾을 TemporalAdjusters
클래스:
LocalDate first = date.with(TemporalAdjusters.firstDayOfMonth());
LocalDate last = date.with(TemporalAdjusters.lastDayOfMonth());
당신이 사용하는 경우 date4j 라이브러리:
DateTime monthEnd = dt.getEndOfMonth();
제 생각이 잘 작동:
Dim MyDate As Date = #11/14/2012# 'This is just an example date
MyDate = MyDate.AddDays(DateTime.DaysInMonth(MyDate.Year, MyDate.Month) - MyDate.Day)