Java SimpleDateFormat解析错误的日期

use*_*122 2 java parsing simpledateformat java-7

我正在尝试使用parse函数SimpleDateFormat将a String转换为aDate

    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");

    String strInput1 = "29-04-2014";
    System.out.println("string 1: " + strInput1);

    Date date1 = new Date();
    try {
        date1 = sdf.parse(strInput1);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("date 1: " + date1.toString());

    String strInput2 = sdf.format(date1);
    System.out.println("string 2: " +strInput2);

    Date date2 = new Date();
    try {
        date2 = sdf.parse(strInput2);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("date 2 " + date2);
Run Code Online (Sandbox Code Playgroud)

输出为date1is Mon Dec 30 00:00:00 GMT 2013,然后正确解析为30-12-2014.

我认为错误是在sdf初始化时的某个地方.

Jon*_*eet 7

你正在使用的YYYY是哪一周.你的意思是yyyy,这是一年.

只需将格式更改为:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Run Code Online (Sandbox Code Playgroud)

YYYY格式说明很少使用,当它使用时,应结合使用E/ u(一周名称/天数)和w(一周的星期).

请注意,您应该考虑设置您的时区SimpleDateFormat...另外,如果您使用的是Java 8,请使用该java.time软件包,否则Joda Time是一个比它更清晰的库java.util.Date.

  • @staticx:它是在Java 7中引入的,在周编号实际上非常重要的情况下,这是一个很好的补充.如果重要的是,Joda也没有得到周编号正确,完全缺乏对本地化周规则的支持. (2认同)