programing

월말계산

prostudy 2022. 5. 8. 22:02
반응형

월말계산

나는 다음 달의 마지막 날이 언제 보내질 예정인지 계산하는 데 문제가 있다.

내 암호는 다음과 같다.

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.timeJava 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

시간 정보를 추가해야 할 경우 사용 가능한 정보를 사용하십시오.LocalDateLocalDateTime같은 변환.

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

반응형