在Java中使用日期的意外行为

时间:2015-09-24 20:44:56

标签: java date calendar

我有以下代码:

import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

import org.junit.Test;

public class DateCalendarTest  {     
    @Test
    public void test1() {
        private final DateFormat df1 = new SimpleDateFormat("MM/dd/yyyy");    
        String batchdt = "2015/09/23";
        System.out.println("Date & Calendar Test: " + batchdt);
        Calendar cal = Calendar.getInstance();
        Date date1 = df1.parse(batchdt);
        cal.setTime(date1);
        System.out.println("Date & Calendar Test: " + cal.getTime());
    }
}

输出:

Date Calendar Test: 2015/09/23
Date Calendar Test: Mon Nov 09 00:00:00 EST 190

有人可以解释为什么这样做会这样吗?

1 个答案:

答案 0 :(得分:1)

您的预期数据与SimpleDateFormat中指定的格式不符。但是,默认情况下,它解析数据的方式是 lenient 。例如,9月31日将被解释为10月1日。

在这里,它被解释为第23年的第2,015个月的第9天.2015个月是167年,11个月,当加入到第23年时产生190年。在这种情况下,它非常宽松。

输出格式是直接打印Date时的预期结果。