2011-02-03 2 views
0

Я хочу узнать, что есть самый простой способ исправить значения дня при его настройке. Я имею в виду:Автоматическая коррекция Java Calendar день месяца?

int birthDay = 30; 
int birthMonth = 1; 
int birthYear = 1980; 

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.DAY_OF_MONTH, birthDay); 
cal.set(Calendar.MONTH, birthMonth); 
cal.set(Calendar.YEAR, birthYear); 

февраля не день 30. С другой стороны, она имеет особое состояние, 1980 год является годом, что февраль составляет 29 дней. Поэтому я должен получить исправленную стоимость как «1980-февраль-29». Он должен принять максимальный день этого месяца, если я превышу диапазон месяца. Как я могу сделать это простейшим способом, и если я смогу найти решение, которому не нужно писать какой-либо дополнительный код, а не использовать методы класса Calendar, это будет идеально.

EDIT: Я изменил cal.set (Calendar.MONTH, birthMonth-1); to cal.set (Calendar.MONTH, birthMonth); извините за это.

+0

Календарь правильно обрабатывает кучи лет. Поэтому нет необходимости в PS –

ответ

4
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.YEAR, birthYear); 
cal.set(Calendar.MONTH, birthMonth); 
cal.set(Calendar.DAY_OF_MONTH, Math.min(birthDay, cal.getActualMaximum(Calendar.DAY_OF_MONTH))); 
+0

Спасибо за ваш ответ, это то, что я искал. – kamaci

0

Нет, в настоящее время это единственный способ.

Конечно, вам может понадобиться проанализировать дату из строки, используя объект java.text.DateFormat (обычно SimpleDateFormat). Это самый близкий к одному слою, который вы можете получить, если ваш вход String.

+0

Обратите внимание, что с будущей Java 7 все, вероятно, изменится, так как будет доступен совершенно новый API. –

1

Использование calendar.getActualMaximum (Calendar.DAY_OF_MONTH), чтобы найти максимальное число месяца

Смежные вопросы