Java日期解析问题 - SimpleDateFormat会自动减少月份

时间:2015-09-24 22:22:33

标签: java date simpledateformat

我尝试使用pattern:

从String解析Date
final static String DATE_RU_PATTERN = "dd.MM.yyyy"; 
private static SimpleDateFormat ruFormatter = new SimpleDateFormat(DATE_RU_PATTERN);
public static Date GetDateFromStringRuFormat (String dateString){       
    try {       
        return ruFormatter.parse(dateString);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

为什么ruFormatter.parse(dateString)给Date带有递减的Month值?

@Test
public void TestGetDateFromStringRuFormat(){
    final String dateString = "24.09.2015";
    Calendar actualCalendar = Calendar.getInstance();
    Date actualResult = DateFormatHelper.GetDateFromStringRuFormat(dateString);
    actualCalendar.setTime(actualResult);
    assertEquals(9, actualCalendar.get(Calendar.MONTH)); // FAILS 
    assertEquals(24, actualCalendar.get(Calendar.DAY_OF_MONTH));
    assertEquals(2015, actualCalendar.get(Calendar.YEAR));
}

2 个答案:

答案 0 :(得分:1)

Calendar这样的{p> java.util.Date从0开始计算数月。 因此,只要您想对月份值执行有意义的操作,请为其添加1。

来自Javadoc

  

get和set的字段编号,表示月份。这是一个   特定于日历的值。格里高利一年中的第一个月   朱利安的日历是1月1日,是0;最后取决于   一年中的月数。

因此,您的单元测试应为:

assertEquals(9, actualCalendar.get(Calendar.MONTH) + 1);

答案 1 :(得分:1)

Calendar类中的月份从零开始:

JANUARY = 0
FEBRUARY = 1

...

所以九月= 8(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#MONTH)。

尝试将测试更改为:

assertEquals(Calendar.SEPTEMBER, actualCalendar.get(Calendar.MONTH)); 
相关问题