1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }