0

我想要什麼:如何在Android上正確解析從String到DateFormat的聯繫人生日?

我寫,我想找出今天我的聯繫人都有其生日的應用程序。

我有什麼至今:

我已經可以掃描手機的聯繫人列表,讓每個生日爲String

的問題是什麼:

有三種不同的情況,當談到生日的DateFormat

  1. 案例:我只知道日月而不是年。在這種情況下,存儲的生日String看起來像這樣:--MM-dd。我可以通過將String的長度與我定義的SimpleDateFormat進行解析來處理這個問題。
  2. 案例:我也知道這一年。在這種情況下,99%的存儲生日String看起來像這樣:yyyy-MM-dd。我也可以處理這個。
  3. 案例:我也知道當年,但存儲的生日String看起來像這樣:dd.MM.yyyy。這個長度與上面的一樣長,所以我不能根據長度來區分兩者。

我想知道的:

爲什麼存儲不同DateFormat S中的聯繫人的生日?這取決於Locale?我用德語和英語(美國)Locale進行了測試,結果相同。我還刪除並在不同DateFormat(來自案例3)的聯繫人中添加了生日。他們像以前一樣儲存。 : - /有沒有辦法以一種簡單而優雅的方式覆蓋所有可能的DateFormat s存儲生日,而無需創建各種各樣的DateFormat s並在循環中檢查它們?

由於提前, kaolick

回答

0

我不想回答我自己的問題,但我發現罪惡的根源:

的原因DateFormat的情況下,3很容易解釋雖然花了我一段時間來弄明白。這是因爲我在我的設備上安裝了Skype,這兩個聯繫人在那裏進入了他們的生日。但Skype正在使用另一個DateFormat(案例3中的一個)。我查看了日誌文件,發現這兩個聯繫人在「常規」聯繫人應用中也有類似情況2的生日條目。

問題解決! :-D

0

一些簡單的基於字符串中的第三個字符,一旦我們知道這不是案件1

private static SimpleDateFormat MMddFormat = new SimpleDateFormat("--MM-dd"); 
private static SimpleDateFormat ddMMyyyyFormat = new SimpleDateFormat("dd-MM-yyyy"); 
private static SimpleDateFormat yyyyMMddFormat = new SimpleDateFormat("yyyy-MM-dd"); 

private Date Format(String dateString) throws ParseException { 
    // possible formats, --mm-dd, yyyy-mm-dd, dd-mm-yyyy 
    if (dateString == null || dateString.isEmpty()) 
     return null; 
    switch (dateString.length()) { 
    case 7: 
     return MMddFormat.parse(dateString); 
    case 8: 
     return (dateString.charAt(2) == '-' ? ddMMyyyyFormat : yyyyMMddFormat).parse(dateString); 
    } 
    return null; 
} 

如果有其他情況下,你將不得不修改這個明顯。

+0

不是一個壞主意。但是如果像這樣的第四種格式有生日,那麼這將不起作用:'MM-dd-yyyy'? – kaolick

+0

有沒有辦法檢查,如果我說我的生日是05-06-1992,如果你不知道我的生日是什麼格式,你會怎麼知道?可能是6號嗎?還是六月五號? – Eluvatar

+0

這就是我的意思!所以我需要一個不同的方法... – kaolick

相關問題