View Javadoc

1   /*
2    * $Id: DateValidator.java 366933 2006-01-07 22:51:01Z niallp $
3    * $Rev: 366933 $
4    * $Date: 2006-01-07 22:51:01 +0000 (Sat, 07 Jan 2006) $
5    *
6    * ====================================================================
7    * Copyright 2001-2006 The Apache Software Foundation
8    *
9    * Licensed under the Apache License, Version 2.0 (the "License");
10   * you may not use this file except in compliance with the License.
11   * You may obtain a copy of the License at
12   *
13   *     http://www.apache.org/licenses/LICENSE-2.0
14   *
15   * Unless required by applicable law or agreed to in writing, software
16   * distributed under the License is distributed on an "AS IS" BASIS,
17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   * See the License for the specific language governing permissions and
19   * limitations under the License.
20   */
21  
22  package org.apache.commons.validator;
23  
24  import java.text.DateFormat;
25  import java.text.ParseException;
26  import java.text.SimpleDateFormat;
27  import java.util.Locale;
28  
29  /***
30   * <p>Perform date validations.</p>
31   * <p>
32   * This class is a Singleton; you can retrieve the instance via the
33   * getInstance() method.
34   * </p>
35   *
36   * @since Validator 1.1
37   */
38  public class DateValidator {
39  
40      /***
41       * Singleton instance of this class.
42       */
43      private static final DateValidator DATE_VALIDATOR = new DateValidator();
44  
45      /***
46       * Returns the Singleton instance of this validator.
47       * @return A singleton instance of the DateValidator.
48       */
49      public static DateValidator getInstance() {
50          return DATE_VALIDATOR;
51      }
52  
53      /***
54       * Protected constructor for subclasses to use.
55       */
56      protected DateValidator() {
57          super();
58      }
59  
60      /***
61       * <p>Checks if the field is a valid date.  The pattern is used with
62       * <code>java.text.SimpleDateFormat</code>.  If strict is true, then the
63       * length will be checked so '2/12/1999' will not pass validation with
64       * the format 'MM/dd/yyyy' because the month isn't two digits.
65       * The setLenient method is set to <code>false</code> for all.</p>
66       *
67       * @param value The value validation is being performed on.
68       * @param datePattern The pattern passed to <code>SimpleDateFormat</code>.
69       * @param strict Whether or not to have an exact match of the datePattern.
70       * @return true if the date is valid.
71       */
72      public boolean isValid(String value, String datePattern, boolean strict) {
73  
74          if (value == null
75                  || datePattern == null
76                  || datePattern.length() <= 0) {
77  
78              return false;
79          }
80  
81          SimpleDateFormat formatter = new SimpleDateFormat(datePattern);
82          formatter.setLenient(false);
83  
84          try {
85              formatter.parse(value);
86          } catch(ParseException e) {
87              return false;
88          }
89  
90          if (strict && (datePattern.length() != value.length())) {
91              return false;
92          }
93  
94          return true;
95      }
96  
97      /***
98       * <p>Checks if the field is a valid date.  The <code>Locale</code> is
99       * used with <code>java.text.DateFormat</code>.  The setLenient method
100      * is set to <code>false</code> for all.</p>
101      *
102      * @param value The value validation is being performed on.
103      * @param locale The locale to use for the date format, defaults to the default
104      * system default if null.
105      * @return true if the date is valid.
106      */
107     public boolean isValid(String value, Locale locale) {
108 
109         if (value == null) {
110             return false;
111         }
112 
113         DateFormat formatter = null;
114         if (locale != null) {
115             formatter = DateFormat.getDateInstance(DateFormat.SHORT, locale);
116         } else {
117             formatter =
118                     DateFormat.getDateInstance(
119                             DateFormat.SHORT,
120                             Locale.getDefault());
121         }
122 
123         formatter.setLenient(false);
124 
125         try {
126             formatter.parse(value);
127         } catch(ParseException e) {
128             return false;
129         }
130 
131         return true;
132     }
133 
134 }