2015-12-11 88 views
1

這裏是我的代碼如何找到給定的日期是在指定日期範圍內

boolean isWithinRange(String d) 
{ 
    boolean withinDate = false; 
    try 
    { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     Date date = dateFormat.parse(d); 
     withinDate = !(date.before(startDate) || date.after(endDate)); 
    } 
    catch (ParseException parseException) 
    { 
    } 
    return withinDate; 
} 

輸入

2015年11月26日
2015年11月26日 - 複製

兩個返回true,但我要求的是「2015-11-26」應該是true,「2015-11-26 - Copy」應該是false。

回答

4

這是因爲SimpleDateFormat高興地解析「2015-11-26」並忽略「 - 複製」部分。

javadoc狀態:

從給定字符串產生日期的開始解析文本。 該方法可能不使用給定字符串的整個文本。

要檢測是否使用了整個字符串,請改爲使用parse(String source, ParsePosition pos)方法。 ParsePosition告訴你停止解析的位置。只需將它與原始日期字符串的長度進行比較即可。

+0

我是否需要修剪解析之前的日期字符串?有沒有修剪日期字符串的其他方式。 – Prabhakaran

+0

查看我更新的答案。 – BetaRide

1

這裏的問題是我們正在傳遞日期格式'yyyy-MM-dd'。這將驗證給定輸入的格式。

例如,

static boolean isWithinRange(String d) 
{ 
    boolean withinDate = false; 
    try 
    { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
     Date date = dateFormat.parse(d); 
     withinDate = !(date.before(startDate) || date.after(endDate)); 
    } 
    catch (ParseException parseException) 
    { 
     parseException.printStackTrace(); 
    } 
    return withinDate; 
} 

上面的代碼拋出異常,因爲我們傳遞日期格式爲 'YYYY-MM-DD HH:MM:SS'。因此,這會發現小時分秒

-1
public static void main(String[] args) { 
    isWithinRange("2015-12-11 - Copy"); 
    isWithinRange("2015-12-11"); 

} 

public static boolean isWithinRange(String d) { 
    boolean withinDate = false; 
    try { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     String dd = d.indexOf(" ") !=-1 ? d.substring(0, d.indexOf(" ")) : d; // Find valid String 
     if(d.equals(dd)){ 
     Date date = dateFormat.parse(d); 
     withinDate = !(date.before(startDate)) || date.after(endDate))); 
     }else{ 
      withinDate =false; 
     } 
    } catch (ParseException parseException) { 
    } 
    return withinDate; 
} 
+0

只有'd'有一個空格作爲第一個不屬於日期的字符時,這才起作用。這仍然會返回'true',例如'2015-12-11-Copy'。 – BetaRide

+0

用戶需要注意第一空間,但他/她會混淆它,修剪()輸入字符串的前導空間和滯後空間。 –

+0

你會發現trim()[http://stackoverflow.com/questions/6652687/strip-leading-and-trailing-spaces-from-java-string] –

0

只是測試,如果大小爲10測試之前:

if (d.length!10) return false; 
相關問題