2013-10-09 63 views
1

我需要將字符串解析爲日期,但事先並不知道字符串將處於哪種模式。這類似於問題How to convert String to Date without knowing the format?使用不同格式/模式解析字符串

爲了解決這個問題,我採用了兩種模式來測試結果。但是,我所得到的有點奇怪。

實施例1:

import java.util.Date; 
    import org.apache.commons.lang3.time.DateUtils; 

    public Date extractDate(String dateStr) { 

     String [] datePatterns = {"yyyy-MM-dd", "dd-MM-yyyy"}; 
     Date date = null; 

     try { 
      date = DateUtils.parseDate(dateStr, datePatterns); 
     } 
     catch (Exception except) { 
       except.printStackTrace(); 
     } 
     return date; 
    } 



    public static void main(String[] args) throws Exception { 
     System.out.println ("2013-09-30:" + extractDate("2013-09-30")); 
     System.out.println ("30-09-2013:" + extractDate("30-09-2013")); 

    } 

這給出:

2013-10-30:Wed Oct 30 00:00:00 EAT 2013 
    30-09-2013:Mon Mar 05 00:00:00 EAT 36 

從解析'30結果-09-2013' 顯然是很奇怪。

實施例2:在這裏,我只切換圖案

 String [] datePatterns = {"dd-MM-yyyy", "yyyy-MM-dd"}; 

這給出:

2013-10-30:Mon Mar 05 00:00:00 EAT 36 
    30-09-2013:Mon Sep 30 00:00:00 EAT 2013 

在實施例2從解析 '2013年10月30日' 的結果很奇怪。

如何解析日期字符串使用不同的格式/模式,以使得到的日期是正確的?

回答

1

更新爲使用parseDateStrictly。當我這樣做,我得到了以下的輸出:

2013-09-30:Mon Sep 30 00:00:00 EDT 2013 
30-09-2013:Mon Sep 30 00:00:00 EDT 2013 
+0

謝謝。這工作。 –

0

我的答案是一樣的。如果沒有任何關於格式的知識,就不能解析日期。寫的日期將是

幾個例子:DD-MM-YYYYMM-DD-YYYYDD/MM/YYYYMM/DD/YYYYMM/DD/YYDD/MM/YY。只有這幾種類型的日期你能找到任何常見的模式?

不!不知道用戶輸入的格式無法解析。

如果您想出模式匹配,則可以使用10-09-2010這樣的日期,它與MM-DD-YYYY格式和DD-MM-YYYY格式相匹配。在這裏您將遇到問題

+0

雖然你的說法是正確的,它並沒有解決被證明特別問題的錯誤所提供的兩種格式是互斥的。 –