2012-06-25 147 views
0

我有一個奇怪的問題。我有這種方法,它應該從目錄的名稱中生成一個Date。SimpleDateFormat總是返回相同的結果

private Date getSubfolderDate(File file) { 
    String name = file.getName(); 
    SimpleDateFormat parser = new SimpleDateFormat("dd-MM-YY"); 
    Date date; 
    try { 
     date = parser.parse(name); 
    } catch (ParseException e) { 
     return null; 
    } 
    return date; 
} 

它返回字符串名稱= 「17-06-12」: 「週一1月2日00:00:00 CET 2012」

和字符串名稱= 「18-06-12」 :「Mon Jan 02 00:00:00 CET 2012」

爲什麼?

後,我用的compareTo(日期XY)比較這些,它返回0,所以它必須是同一.....

回答

3

您的格式也是不正確的,應該dd-MM-yy(用於17- 06-12),要tracedown問題檢查catch塊與printStackTrace()

此外

SimpleDateFormat解析日期從字符串得到的日期將調用的toString()有固定的格式

所以,如果你想再次打印格式的日期,你需要使用simpleDateFormat.format(dateInstance)

Date類沒有保存的格式toString()

+0

爲什麼你指的toString() – Leander

+0

在System.out.println(dateInstance)中打印日期;它會調用dateInstance.toString(),所以輸出 –

+0

我從日食讀取日期....我從來沒有調用System.out.println(dateInstance); 但compareTo方法也產生0 – Leander

3

要打印我想這個代碼的任何屬性:

static Date getSubfolderDate(File file) { 
    String name = file.getName(); 
    SimpleDateFormat parser = new SimpleDateFormat("dd-MM-yy"); 
    Date date; 
    try { 
    date = parser.parse(name); 
    } catch (ParseException e) { 
    return null; 
    } 
    return date; 
} 
public static void main(String[] args) { 
    System.out.println(getSubfolderDate(new File("17-06-12"))); 
    System.out.println(getSubfolderDate(new File("18-06-12"))); 
} 

它打印

Sun Jun 17 00:00:00 CEST 2012 
Mon Jun 18 00:00:00 CEST 2012 
+0

是的大寫字母Y是問題 – Leander

+0

但是,您提供的代碼沒有生成您發佈的輸出;它拋出了一個異常,聲明'非法模式字符'Y''這可能是告訴我,你的代碼中有異常處理工作不好。處理異常的最好方法不是處理它們,除了將檢查過的異常包裝到「RuntimeException」中並重新拋出。 –

+0

問題是,有些文件夾是以日期和文件夾名稱命名的,日期和文件夾不是.....日期== null後來用於識別它是否以日期命名,這將與其他命名方式不同。 通常情況下,例外情況是需要的 – Leander