developer tip

Joda-Time을 사용하여 주어진 달의 일수를 어떻게 얻습니까?

copycodes 2021. 1. 7. 08:08
반응형

Joda-Time을 사용하여 주어진 달의 일수를 어떻게 얻습니까?


30 days hath September,
   April, June and November,
 All the rest have 31,
   Excepting February alone
(And that has 28 days clear,
   With 29 in each leap year).

이 정보를 해부학 적으로 얻을 수 있습니까? (물론시를 의미하는 것은 아닙니다)


DateTime월의 값을 나타내는 개체 가 있다면 매우 간단합니다. dayOfMonth해당 DateTime개체 에서 속성을 얻고 속성 의 최대 값을 얻습니다. 다음은 샘플 함수입니다.

public static int daysOfMonth(int year, int month) {
  DateTime dateTime = new DateTime(year, month, 14, 12, 0, 0, 000);
  return dateTime.dayOfMonth().getMaximumValue();
}

예, 예쁘지는 않지만 :

import org.joda.time.*;
import org.joda.time.chrono.*;
import org.joda.time.field.*;

public class Test {
    public static void main(String[] args) {
        GregorianChronology calendar = GregorianChronology.getInstance();
        DateTimeField field = calendar.dayOfMonth();

        for (int i = 1; i < 12; i++) {
            LocalDate date = new LocalDate(2010, i, 1, calendar);
            System.out.println(field.getMaximumValue(date));
        }
    }
}

12 개월이 있고 2010 년에 관심이 있다는 가정을 하드 코딩했습니다. 그래도 그레고리력 연대기를 명시 적으로 선택했습니다. 다른 연대기에서는 물론 다른 답을 얻을 수 있습니다. (그리고 "12 개월"루프도 유효한 가정이 아닙니다 ...)

값을 가져 오기 위해 값이 시간대에 의존하지 않는다는 점을 강조하기 위해 a LocalDate보다는 a를 사용 DateTime했습니다.

이것은 여전히 ​​보이는 것만 큼 간단하지 않습니다. 하나의 연대기를 사용하여을 구성하면 어떤 일이 발생하는지는 알 수 LocalDate없지만 다른 연대기에서 필드의 최대 값을 요청합니다. 나는 무엇에 대한 몇 가지 아이디어가 있습니다 Joda 시간에 대한 일정 금액을 알고, 일을하지만, 아마 좋은 생각이 아니다 :)


Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, yourMonth);
cal.set(Calendar.YEAR, yourYear);
cal.getActualMaximum(Calendar.DAY_OF_MONTH); // <-- the result!

다음은 또 다른 간단한 기능입니다.

int daysOfMonth(DateTime dt) {
    int month = dt.getMonthOfYear();
    int month2 = month;
    int days = dt.getDay();
    DateTime dt2 = dt;
    while (month == month2 ) {
       days++;
       dt2.addDays(1);
       month2 = dt2.getMonthOfYear();
    }
    return (days - 1);
}

참조 URL : https://stackoverflow.com/questions/3772945/how-do-i-obtain-the-number-of-days-within-a-given-month-using-joda-time

반응형