锁定老帖子 主题:自己想的一个java日期验证,不用正则
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-23
自己想的一个java日期验证,不用正则表达式 private static final String DATE_DEFAULT_FORMAT = "yyyyMMdd"; /** * string is date * * @author xieyan 2012/10/22 * @param str checked string * @param formatStr format * @return true:is date | false:is not date */ public static boolean isDate(String str, String formatStr) { if (isNull(str)) return false; if (isNullOrEmpty(formatStr)) formatStr = DATE_DEFAULT_FORMAT; if (str.length() != formatStr.length()) return false; SimpleDateFormat format = new SimpleDateFormat(formatStr); try { return str.equals(format.format(format.parse(str))); // 这里用equals主要是为了防止像20121032这样数据会转为20121101 } catch (ParseException e) { return false; } } junit方法 /** * test StringUtilities.isDate */ public void testIsDate() { // string is 20121022 assertTrue(StringUtilities.isDate("20121022", "")); // string is 20121022 assertTrue(StringUtilities.isDate("20121022", null)); // string is 20121022, format is yyyyMMdd assertTrue(StringUtilities.isDate("20121022", "yyyyMMdd")); // string is 2012/10/22, format is yyyy/MM/dd assertTrue(StringUtilities.isDate("2012/10/22", "yyyy/MM/dd")); // string is 2012-10-22, format is yyyy-MM-dd assertTrue(StringUtilities.isDate("2012-10-22", "yyyy-MM-dd")); // string is 20121022 11:53:00.123, format is yyyyMMdd hh:mm:ss.SSS assertTrue(StringUtilities.isDate("20121022 11:53:00.123", "yyyyMMdd hh:mm:ss.SSS")); // string is 2012122, format is yyyyMdd assertFalse(StringUtilities.isDate("2012132", "yyyyMdd")); // string is 2012/10/22, format is yyyy/MM/dd assertFalse(StringUtilities.isDate("20121032", "yyyy-MM-dd")); // string is 2012/10/22, format is yyyy/MM/dd assertFalse(StringUtilities.isDate("20121032", "yyyyMMdd")); // string is 2012122, format is yyyyMMdd assertFalse(StringUtilities.isDate("2012132", "yyyyMMdd")); // string is "" assertFalse(StringUtilities.isDate("", "yyyyMMdd")); // string is "null" assertFalse(StringUtilities.isDate("null", "yyyyMMdd")); // string is null assertFalse(StringUtilities.isDate(null, "yyyyMMdd")); } 有异议的朋友可以短信我。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-23
performance
|
|
返回顶楼 | |
发表时间:2012-10-24
看标题我就在猜,楼主不会是想用异常来代替正则吧,一看,果然。。。
|
|
返回顶楼 | |
发表时间:2012-10-24
就创新这方面来说,还是好的。
|
|
返回顶楼 | |
发表时间:2012-10-24
这不是一个新方法, 老早就有了, 甚至js都有这种方法.
大多反对此方法的观点是, 异常性能太低!! |
|
返回顶楼 | |
发表时间:2012-10-24
BUG或者说歧义。请楼主测试
isDate("2012-01-31", "yyyy-M-d"); 另外,严重建议使用setLenient方法来替代重写format进行比较 |
|
返回顶楼 | |
发表时间:2012-10-24
public static boolean isDate(String str, String formatStr) {
if (isNull(str)) return false; if (isNullOrEmpty(formatStr)) formatStr = DATE_DEFAULT_FORMAT; if (str.length() != formatStr.length()) return false; SimpleDateFormat format = new SimpleDateFormat(formatStr); format.setLenient(false); try { format.parse(str); return true; } catch (ParseException e) { return false; } } 这个第一个人告诉我的时候,我修正了,一直没有上传,不好意思 assertFalse(StringUtilities.isDate("2012-01-31", "yyyy-M-d")); 测试的时候是绿条 |
|
返回顶楼 | |
发表时间:2012-10-24
xieyan30 写道 public static boolean isDate(String str, String formatStr) {
if (isNull(str)) return false; if (isNullOrEmpty(formatStr)) formatStr = DATE_DEFAULT_FORMAT; if (str.length() != formatStr.length()) return false; SimpleDateFormat format = new SimpleDateFormat(formatStr); format.setLenient(false); try { format.parse(str); return true; } catch (ParseException e) { return false; } } 这个第一个人告诉我的时候,我修正了,一直没有上传,不好意思 assertFalse(StringUtilities.isDate("2012-01-31", "yyyy-M-d")); 测试的时候是绿条 typo了,是2012-1-31,不过,楼主想象能力还真差 |
|
返回顶楼 | |
发表时间:2012-10-24
为什么要做日期验证啊,现在不都是日期控件,时间是不需要验证的。
|
|
返回顶楼 | |
发表时间:2012-10-25
很多客户要求有日期控件,但是可以手动入力
|
|
返回顶楼 | |