SimpleDateFormat无法识别月份

时间:2011-05-13 13:09:45

标签: java parsing date

我想解析一个日期字符串,但我失败了。 为了说明我的问题,我写了这个简单的JUnit测试:

@Test
public void testParseJavaDate() throws ParseException {     
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD_HH-mm-ss", Locale.GERMAN);

    String inputtime = "2011-04-21_16-01-08";
    Date parse = sdf.parse(inputtime);

    assertEquals(inputtime,sdf.format(parse));
}

此测试失败并显示以下消息:

  

org.junit.ComparisonFailure:       预期:其中2011-0 [4] -21_16-01-08>       但是:< 2011-0 [1] -21_16-01-08>

我不明白为什么格式化程序无法正确解析日期。你有什么想法吗?

4 个答案:

答案 0 :(得分:8)

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd_HH-mm-ss”,Locale.GERMAN);

String inputtime = "2011-04-21_16-01-08";
Date parse = sdf.parse(inputtime);

使用dd而不是DD。

答案 1 :(得分:6)

你想要“dd”(每月一天),而不是“DD”(一年中的一天):

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.GERMAN);

答案 2 :(得分:3)

使用d代替D,因为D是'一年中的一天',所以月份被迫匹配一年中的第21天(1月份)

答案 3 :(得分:0)

前面所有的都是正确的,但你也必须使用'mm'代替'MM',反之亦然 因为'M'显示分钟,必要时带前导零

所以你的代码如下

public void testParseJavaDate() throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd_HH-MM-ss", Locale.GERMAN);

    String inputtime = "2011-04-21_16-01-08";
    Date parse = sdf.parse(inputtime);

    sdf = new SimpleDateFormat("dd/mm/yyyy HH:MM:ss", Locale.GERMAN);

    System.out.println(sdf.format(parse));

    assertEquals(inputtime, sdf.format(parse));
}

它会打印

run: 21/04/2011 16:01:08 BUILD SUCCESSFUL (total time: 0 seconds)