462 }
463 if (s.equals(monthNames[i])) {
464 result = i + 1;
465 break;
466 }
467 }
468 }
469
470 return result;
471
472 }
473
474 /**
475 * Возвращает true, если целое число code представляет действительную
476 * неделю месяца, или false в противном случае.
477 *
478 * @param code код, проверяемый на действительность.
479 * @return
true
, если целое число code представляет
480 * действительную неделю месяца.
481 */
482 public static boolean isValidWeekInMonthCode(final int code) {
483
484 switch(code) {
485 case FIRST_WEEK_IN_MONTH:
486 case SECOND_WEEK_IN_MONTH:
487 case THIRD_WEEK_IN_MONTH:
488 case FOURTH_WEEK_IN_MONTH:
489 case LAST_WEEK_IN_MONTH: return true;
490 default: return false;
491 }
492
493 }
494
495 /**
496 * Определяет, является ли заданный год високосным.
497 *
498 * @param yyyy год (в диапазоне от 1900 до 9999).
499 *
500 * @return
true
, если заданный код является високосным.
501 */
502 public static boolean isLeapYear(final int yyyy) {
503
504 if ((yyyy % 4) != 0) {
505 return false;
506 }
507 else if ((yyyy % 400) == 0) {
508 return true;
509 }
510 else if ((yyyy % 100) == 0) {
511 return false;
512 }
513 else {
514 return true;
515 }
516
517 }
518
519 /**
520 * Возвращает количество високосных годов от 1900 до заданного года
521 * ВКЛЮЧИТЕЛЬНО.
522 *
523 * Учтите, что 1900 год високосным не является.
524 *
525 * @param yyyy год (в диапазоне от 1900 до 9999).
526 *
527 * @return количество високосных годов от 1900 до заданного года.
528 */
529 public static int leapYearCount(final int yyyy) {
530
531 final int leap4 = (yyyy - 1896) / 4;
532 final int leap100 = (yyyy - 1800) / 100;
533 final int leap400 = (yyyy - 1600) / 400;
534 return leap4 - leap100 + leap400;
535
536 }
537
538 /**
539 * Возвращает номер последнего дня месяца с учетом
540 * високосных годов.
541 *
542 * @param month месяц.
543 * @param yyyy год (в диапазоне от 1900 до 9999).
544 *
545 * @return номер последнего дня месяца.
546 */