我想解析一个日期字符串,但我失败了。 为了说明我的问题,我写了这个简单的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>
我不明白为什么格式化程序无法正确解析日期。你有什么想法吗?
答案 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)