在JAVA中如何检查字符串日期的合法性
生活随笔
收集整理的這篇文章主要介紹了
在JAVA中如何检查字符串日期的合法性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在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);
??????? }
??? }
} 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的在JAVA中如何检查字符串日期的合法性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于syslog+logstash+el
- 下一篇: 史上最大规模高校分析技术大赛是如何诞生的