在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);
        }
    }
}

C++校验日期串合法性

在做项目接口时,需要校验日期串的合法性,就写了这个,仅够初步使用 代码根据业务做了些限制,可去掉 #include #include #include #include #include ...
  • pecywang
  • pecywang
  • 2013年08月24日 11:54
  • 2407

判断日期合法性

这边写一个判断一个日期的合法性,比如是没有2008-02-31,aaaa-03-89等都不合法的,这个Datetil在java中可以解决这样的一个问题,如果还有缺陷请相告,感谢! import ja...
  • u014001866
  • u014001866
  • 2016年03月18日 13:28
  • 2094

如何检查URL的合法性?

URI uri;        try {            uri = new URI(url);        } catch (URISyntaxException e) {        ...
  • Godric42
  • Godric42
  • 2014年05月17日 21:10
  • 3476

Java函数调用时参数合法性检查时机

在java开发过程中,我们时常需要调用自己或者别人的方法,在调用方法时不可避免一个问题,那就是参数问题。 我们调用方法时常需要传入参数,这时就涉及到一个问题,那就是到底是在调用方法前检查参数的合法性...
  • d_good
  • d_good
  • 2017年02月27日 17:32
  • 555

检查密码的规则合法性

给定一个字符串,用以下规则检查合法性 完全符合返回True,否则返回False 1.第一位是字母 2.只能包含字母,数字,下划线 3.只能字母或数字结尾 4.最小长度为2 5.最大长度为1...
  • zzzzzzzlmy
  • zzzzzzzlmy
  • 2016年09月04日 17:38
  • 324

javascript判断用户输入是否合法日期格式

function isDate(p_Expression){ var re = //d{4}-/d{1,2}-/d{1,2}/g; var val = new Boolean( re.test(p_E...
  • imbin
  • imbin
  • 2007年07月18日 10:41
  • 486

java检查URL合法性

     /**     * URL检查     *      * @param pInput     要检查的字符串     * @return boolean   返回检查结果     */   ...
  • a9529lty
  • a9529lty
  • 2008年10月22日 20:44
  • 5837

手机号码合法性判断

问题描述: 我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如 下: 1、长度13 位; 2、以86 的国家码打头; 3、手机号码的每一位都是数字...
  • u013160081
  • u013160081
  • 2014年04月13日 09:24
  • 315

javascript验证给定的日期的合法性

//验证给定的日期是否合法   ,参数格式要求:yyyy-mm-dd 可以根据情况更改正则表达式function isDate(oStartDate){    //对日期格式进行验证 要求为2000-...
  • precipitant
  • precipitant
  • 2005年12月28日 08:57
  • 5145

算术表达式的合法性判断与求值(下)

上一篇讲到,通过编译原理的方法(词法分析和语法分析)来判断字符串表示的算术表达式的合法性。这一篇,接着讲在算术表达式合法的情况下,对表达式进行求值。 问题:给定一个字符串,只包含 '+'、'-'...
  • lisong694767315
  • lisong694767315
  • 2014年10月07日 11:05
  • 2918
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在JAVA中如何检查字符串日期的合法性
举报原因:
原因补充:

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