- /*
- * $Header: /home/cvs/jakarta-commons/validator/src/share/org/apache/commons/validator/DateValidator.java,v 1.6 2004/02/21 17:10:29 rleland Exp $
- * $Revision: 1.6 $
- * $Date: 2004/02/21 17:10:29 $
- *
- * ====================================================================
- * Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- package org.apache.commons.validator;
-
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Locale;
-
- /**
- * <p>Perform date validations.</p>
- * <p>
- * This class is a Singleton; you can retrieve the instance via the
- * getInstance() method.
- * </p>
- *
- * @since Validator 1.1
- */
- public class DateValidator {
-
- /**
- * Singleton instance of this class.
- */
- private static final DateValidator instance = new DateValidator();
-
- /**
- * Returns the Singleton instance of this validator.
- */
- public static DateValidator getInstance() {
- return instance;
- }
-
- /**
- * Protected constructor for subclasses to use.
- */
- protected DateValidator() {
- super();
- }
-
- /**
- * <p>Checks if the field is a valid date. The pattern is used with
- * <code>java.text.SimpleDateFormat</code>. If strict is true, then the
- * length will be checked so '2/12/1999' will not pass validation with
- * the format 'MM/dd/yyyy' because the month isn't two digits.
- * The setLenient method is set to <code>false</code> for all.</p>
- *
- * @param value The value validation is being performed on.
- * @param datePattern The pattern passed to <code>SimpleDateFormat</code>.
- * @param strict Whether or not to have an exact match of the datePattern.
- */
- public boolean isValid(String value, String datePattern, boolean strict) {
-
- if (value == null
- || datePattern == null
- || datePattern.length() <= 0) {
-
- return false;
- }
-
- SimpleDateFormat formatter = new SimpleDateFormat(datePattern);
- formatter.setLenient(false);
-
- try {
- formatter.parse(value);
- } catch(ParseException e) {
- return false;
- }
-
- if (strict && (datePattern.length() != value.length())) {
- return false;
- }
-
- return true;
- }
-
- /**
- * <p>Checks if the field is a valid date. The <code>Locale</code> is
- * used with <code>java.text.DateFormat</code>. The setLenient method
- * is set to <code>false</code> for all.</p>
- *
- * @param value The value validation is being performed on.
- * @param locale The locale to use for the date format, defaults to the default
- * system default if null.
- */
- public boolean isValid(String value, Locale locale) {
-
- if (value == null) {
- return false;
- }
-
- DateFormat formatter = null;
- if (locale != null) {
- formatter = DateFormat.getDateInstance(DateFormat.SHORT, locale);
- } else {
- formatter =
- DateFormat.getDateInstance(
- DateFormat.SHORT,
- Locale.getDefault());
- }
-
- formatter.setLenient(false);
-
- try {
- formatter.parse(value);
- } catch(ParseException e) {
- return false;
- }
-
- return true;
- }
-
- }