월말계산
나는 다음 달의 마지막 날이 언제 보내질 예정인지 계산하는 데 문제가 있다.
내 암호는 다음과 같다.
RecurrenceFrequency recurrenceFrequency = notification.getRecurrenceFrequency();
Calendar nextNotifTime = Calendar.getInstance();
이것이 내가 믿는 문제의 원인이다.
nextNotifTime.add(recurrenceFrequency.getRecurrencePeriod(),
recurrenceFrequency.getRecurrenceOffset());
달력을 사용하여 통지할 다음 달의 마지막 날을 올바르게 설정하려면 어떻게 해야 하는가?
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
이것은 당월의 실제 최대값을 반환한다.예를 들어 지금은 윤년 2월이라 29를 돌려준다.int
.
java.time.properties.TemporaryAdjusters.Last Day Of Month()
사용java.time
Java 8에 내장된 라이브러리, 당신은 인터페이스를 사용할 수 있다.유틸리티 클래스에서 사용할 수 있는 구현을 찾아보십시오.
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
LocalDate now = LocalDate.now(); //2015-11-23
LocalDate lastDay = now.with(TemporalAdjusters.lastDayOfMonth()); //2015-11-30
시간 정보를 추가해야 할 경우 사용 가능한 정보를 사용하십시오.LocalDate
로LocalDateTime
같은 변환.
lastDay.atStartOfDay(); //2015-11-30T00:00
마지막 날을 날짜 개체로 지정하려면:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
Date lastDayOfMonth = cal.getTime();
달력을 다음 달 1일로 설정한 다음 하루를 빼면 된다.
Calendar nextNotifTime = Calendar.getInstance();
nextNotifTime.add(Calendar.MONTH, 1);
nextNotifTime.set(Calendar.DATE, 1);
nextNotifTime.add(Calendar.DATE, -1);
이 코드를 실행한 후 nextNotifTime은 현재 달의 마지막 날로 설정된다.오늘이 월의 마지막 날이라면 이 코드의 순효과는 달력 객체가 변하지 않는다는 것을 명심하십시오.
다음을 준수하면 항상 적절한 결과를 얻을 수 있다.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, ANY_MONTH);
cal.set(Calendar.YEAR, ANY_YEAR);
cal.set(Calendar.DAY_OF_MONTH, 1);// This is necessary to get proper results
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
cal.getTime();
최신 버전 사용java.time
최고의 해결책은 다음과 같다.
LocalDate date = LocalDate.now();
LocalDate endOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
또는 다음을 수행할 수 있다.
LocalDate endOfMonth = date.withDayOfMonth(date.lengthOfMonth());
당신은 또한 Year Month를 사용할 수 있다.
다음과 같은 경우:
YearMonth.of(2019,7).atEndOfMonth()
YearMonth.of(2019,7).atDay(1)
https://docs.oracle.com/javase/8/docs/api/java/time/YearMonth.html#atEndOfMonth--을 참조하십시오.
저것 좀 봐getActualMaximum(int field)
캘린더 객체의 메서드.
일정관리 개체를 마지막 날짜를 찾는 달로 설정한 경우getActualMaximum(Calendar.DAY_OF_MONTH)
마지막 날을 너에게 줄거야
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = sdf.parse("11/02/2016");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println("First Day Of Month : " + calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
System.out.println("Last Day of Month : " + calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Kotlin 날짜 연장 구현 방법java.util.Calendar
fun Date.toEndOfMonth(): Date {
return Calendar.getInstance().apply {
time = this@toEndOfMonth
}.toEndOfMonth().time
}
fun Calendar.toEndOfMonth(): Calendar {
set(Calendar.DAY_OF_MONTH, getActualMaximum(Calendar.DAY_OF_MONTH))
return this
}
전화할 수 있다.toEndOfMonth
다음과 같은 각 날짜 객체에서 기능한다.Date().toEndOfMonth()
참조URL: https://stackoverflow.com/questions/9397203/last-day-of-month-calculation
'programing' 카테고리의 다른 글
Vuex 4, 구성 요소의 상태가 비어 있음 (0) | 2022.05.08 |
---|---|
개미 경고: "mitantruntime"이 설정되지 않음" (0) | 2022.05.08 |
웹 팩이 있는 Vue 라우터 기본 예 (0) | 2022.05.08 |
새 라인이 형식 문자열에 없는 한 호출 후 인쇄가 플러시되지 않는 이유는? (0) | 2022.05.08 |
->>>오래된 연산자인가, 오타/오류인가? (0) | 2022.05.08 |