子在川上曰

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

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

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

          主站蜘蛛池模板: 濉溪县| 资源县| 枞阳县| 彰化县| 本溪市| 民和| 文昌市| 北宁市| 绍兴市| 兴义市| 靖州| 高邮市| 金阳县| 兰州市| 盘锦市| 北票市| 白城市| 壶关县| 滨海县| 饶阳县| 乌鲁木齐市| 东乡族自治县| 盐边县| 东方市| 双城市| 花莲县| 镇康县| 安福县| 北辰区| 息烽县| 泗水县| 微山县| 会理县| 东乌| 崇义县| 韶山市| 视频| 温州市| 左贡县| 区。| 广河县|