在JAVA中如何检查字符串日期的合法性

转载 2011年01月11日 10:05:00

在JAVA中如何检查字符串日期的合法性

文/陈刚 from www.chengang.com.cn 2005-11-04 


  在SWT中还没有日期控件,所以我的日期是用文本框手工输入的,这时就需要验证输入的日期是否合法。在之前我是复制很久以前写的一段代码,它的解决方法是分解日期字串,然后检查,这很笨且不严格。正确的方案应该是利用DateFormat类来检查,如下所示:
 
public final class StringUtil {
    private static Calendar calendar = Calendar.getInstance();
    private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    private static DateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    static {
        dateFormat.setLenient(false);//这个的功能是不把1996-13-3 转换为1997-1-3
        dateTimeFormat.setLenient(false);
    }
 
    public static Date parseStringToDate(String dateStr) {
        if (dateStr == null || dateStr.trim().equals(""))
            return null;
        dateStr = dateStr.trim(); 
        Date date = null;
        try {
            if (dateStr.length() <= 10) {
                date = dateFormat.parse(dateStr);
            } else {
                date = dateTimeFormat.parse(dateStr);
            }
        } catch (Exception e) {
            throw new IllegalArgumentException("你输入的日期不合法,请重新输入");
        }
        return date;
    }
}

 
这个方法的Test Case也一并给出如下:
 
public class TestStringUtil extends TestCase {
    public void testParseStringToDate() {
        {
            Calendar c = Calendar.getInstance();
            c.clear();
            c.set(2000, 1, 3, 0, 0, 0);
            Date d = StringUtil.parseStringToDate("2000-02-03");
            assertEquals(c.getTime().getTime(), d.getTime());
        }
        {
            Calendar c = Calendar.getInstance();
            c.clear();
            c.set(2000, 1, 3, 11, 22, 33);
            Date d = StringUtil.parseStringToDate("2000-02-03 11:22:33");
            assertEquals(c.getTime().getTime(), d.getTime());
        }
        {
            Calendar c = Calendar.getInstance();
            c.clear();
            c.set(2000, 1, 3, 0, 0, 0);
            Date d = StringUtil.parseStringToDate("2000-02-3");
            assertEquals(c.getTime().getTime(), d.getTime());
        }
        {
            Calendar c = Calendar.getInstance();
            c.clear();
            c.set(2000, 1, 3, 1, 2, 3);
            Date d = StringUtil.parseStringToDate("2000-02-03 1:02:03");
            assertEquals(c.getTime().getTime(), d.getTime());
        }
        {
            assertNull(StringUtil.parseStringToDate(""));
            assertNull(StringUtil.parseStringToDate("  "));
            assertNull(StringUtil.parseStringToDate(null));
        }
    }
    public void testParseStringToDateException() {
        testParseStringToDateException("2000");
        testParseStringToDateException("2000-13-03");
        testParseStringToDateException("2000-02-03 51:02:03");
        testParseStringToDateException("2000-02-03 01:f2:03");
        testParseStringToDateException("2000-02-03 01:02");
        testParseStringToDateException("2000-02-03 01:02:222");
    }
    private void testParseStringToDateException(String dateStr) {
        try {
            StringUtil.parseStringToDate(dateStr);
            fail("末抛出异常");
        } catch (Exception e) {
            assertTrue(true);
        }
    }
}

检查字符串的合法性

  • 2015年10月16日 09:05
  • 5KB
  • 下载

java 检查用户名的合法性

  • 2007年04月05日 12:57
  • 1KB
  • 下载

C语言JSON字符串合法性检查

在http://www.json.org/JSON_checker/上有一个开源的工具,仅一个C文件、一个H文件,还附带UTF8转UTF16的转换工具。将main函数修改了一下,便可作为工程的一个小模...

一个通用的Java正则匹配工具(检查邮箱名、电话号码、用户密码、邮政编码等合法性的工具类)

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexUtils { ...

一个通用的Java正则匹配工具(检查邮箱名、电话号码、用户密码、邮政编码等合法性的工具类)

一个通用的Java正则匹配工具(检查邮箱名、电话号码、用户密码、邮政编码等合法性的工具类)。 一个通用且常用的Java正则匹配工具,用以检查邮箱名、电话号码、用户密码、邮政编码等合法性。 ...

Java面试宝典系列之字符串转整型、判断IP合法性、求最大公约数

Java面试宝典系列之字符串转整型、判断IP合法性、求最大公约数 作者:egg 邮箱:xtfggef@gmail.com 微博:http://weibo.com/...

bootstrap弹出登录框【带合法性检查】

最近做的网站涉及到访问控制,在访问需要登录才能使用的页面或功能时,会弹出登录框: 效果如下: 图 1-点击用户名时,如未登录弹出登录框对这个功能的详细描述: 不涉及到登录时,登录框隐藏 涉及到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在JAVA中如何检查字符串日期的合法性
举报原因:
原因补充:

(最多只允许输入30个字)