2012-06-25 149 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