GregorianCalendar는 Calendar 클래스의 구체적인(concrete) 하위 클래스로, 전 세계 대부분의 국가에서 사용하는 표준 달력 시스템을 제공합니다. Java에서 GregorianCalendar는 그레고리력(Gregorian calendar)과 율리우스력(Julian calendar)을 모두 처리할 수 있습니다.
특정 연도의 특정 월이 며칠까지 있는지 확인하려면 GregorianCalendar 클래스의 getActualMaximum() 메서드를 사용하면 됩니다. 이 메서드는 지정한 달력 필드가 실제로 가질 수 있는 최댓값을 반환합니다. 예를 들어 윤년인지 아닌지에 따라 2월의 최대 일수가 29일 또는 28일로 자동 계산되므로, 복잡한 윤년 판별 로직을 직접 작성할 필요가 없습니다. 메서드의 매개변수에는 Calendar 클래스에 정의된 어떤 필드든 전달할 수 있습니다.
문법(Syntax)
public int getActualMaximum(int field)
예제 코드(Example)
아래 예제는 2000년부터 2017년까지 각 연도의 2월이 며칠인지 출력합니다.
import java.util.*;
public class NoOfDaysInAMonthOfAYearTest {
public static void main(String []args) {
for (int i = 2000; i < 2018; i++) {
Calendar calendar = new GregorianCalendar(i, Calendar.FEBRUARY, 1);
int numberOfDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("February " + i + ": " + numberOfDays + " days");
}
}
}
실행 결과(Output)
February 2000: 29 days February 2001: 28 days February 2002: 28 days February 2003: 28 days February 2004: 29 days February 2005: 28 days February 2006: 28 days February 2007: 28 days February 2008: 29 days February 2009: 28 days February 2010: 28 days February 2011: 28 days February 2012: 29 days February 2013: 28 days February 2014: 28 days February 2015: 28 days February 2016: 29 days February 2017: 28 days
실행 결과를 보면 2000년, 2004년, 2008년, 2012년, 2016년처럼 4로 나누어 떨어지는 해(윤년)에는 2월이 29일로 계산되고, 나머지 해에는 28일로 계산되는 것을 확인할 수 있습니다. 이처럼 getActualMaximum(Calendar.DAY_OF_MONTH)를 활용하면 연도와 월에 상관없이 정확한 말일 날짜를 손쉽게 얻을 수 있습니다.