子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
          數(shù)據(jù)加載中……

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

          文/陳剛 from www.chengang.com.cn 2005-11-04 


            在SWT中還沒有日期控件,所以我的日期是用文本框手工輸入的,這時就需要驗證輸入的日期是否合法。在之前我是復(fù)制很久以前寫的一段代碼,它的解決方法是分解日期字串,然后檢查,這很笨且不嚴格。正確的方案應(yīng)該是利用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 轉(zhuǎn)換為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);
                  }
              }
          }

          posted on 2006-03-07 14:39 陳剛 閱讀(3531) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 石泉县| 陈巴尔虎旗| 安平县| 团风县| 保亭| 镇康县| 东港市| 昭通市| 宁安市| 信阳市| 景宁| 威海市| 思茅市| 玉溪市| 马公市| 平安县| 科尔| 大关县| 万载县| 仪征市| 广宁县| 台前县| 巢湖市| 开鲁县| 山丹县| 京山县| 禄丰县| 遂平县| 望都县| 贺州市| 成武县| 阿图什市| 察雅县| 姜堰市| 开江县| 托克逊县| 开平市| 思茅市| 甘德县| 紫云| 原平市|