2010-02-12 143 views
1

這是我的問題 - 我需要解析一個字符串並查找它是否包含日期。字符串的例子:將人類可讀的日期轉換爲java日期對象

「明天上午02」 「2010年2月16日16:00」 「今日16:00」

你知道有哪些解決人類可讀的日期轉換任何Java庫?

回答

-1

這是一個實現是兩個問題,一個關於鑑定,其他的轉換。

識別可能的日期範圍內的(相對)容易,轉換然而,對於許多原因,尤其是純粹的多種方式可以表達語義的日期,以及隨之而來的歧義和誤導性陳述,可以出現很成問題。讓我們看看這裏的一些明顯的陷阱:

  • 「後天下午2點。」如果我們簡單評估「明天下午2點」,我們將成爲一個漂泊的日子。

  • 「2010年10月16日的兩天後」。它變得更糟......

  • 「沒有太大的晚上9點前週五2013年3月13日」我們可以得到追溯到但背景使得它很曖昧。

假設你只是想在一個字符串,你可以做這樣的事情,以確定潛在的日期匹配...

private final String[] datePatterns = {"Yesterday","Today","Tomorrow", //etc 
     "Sunday","Monday","Tuesday","Thursday","Friday", // etc 
     "Lundi","Mardi","Mercredi", //etc in French 
     "2001","2002", // all the years 
     "AM","PM", 
     "January","February","March","August"}; 
private List lx = new ArrayList(); 


public boolean mayContainDates(String toCheck) 
{ 
toCheck = toCheck.toUpperCase(); 

// irl we'd build this list 1 time in the constructor 
for(int i = 0; i < datePatterns.length; i++) 
{ 
lx.add(datePatterns[i].toUpperCase()); 
} 

    Iterator lit = lx.iterator(); 

    while(lit.hasNext()) 
    {  
    if (toCheck.contains((String) lit.next()) 
    { 
    return true; 
    } 
    } 

    return false; 
} 

它真的是你如何設置你的datePattern String數組問題比較。或者,你可以以相似的方式迭代一個正則表達式數組,但是它會很慢。你可能會得到很多誤報,但你可以明顯改進這個簡單的模型。

+0

非常感謝您的回答。你是對的,日期的確定更難以解決,而且在我看來,一個簡單的基於知識的決策數據庫應該有所幫助 – airlocker 2010-02-12 11:21:51