Java SimpleDateFormat转换为错误的日期

时间:2016-01-28 15:36:39

标签: java simpledateformat

这可能是一个简单的问题。我正在使用SimpleDateFormat将String转换为日期。我通过互联网搜索解决了我的问题,但我没有找到任何东西。 但转型是错误的。我不知道为什么。

我想获取示例2015.09.30

的格式

这是代码

        Date date1 = null;

        String sd ="2015.09.30";
        try {
            SimpleDateFormat sdToDate = new SimpleDateFormat("yyyy.MM.dd");
            date1 = sdToDate.parse(sd);
        } catch (ParseException ex2) {
            ex2.printStackTrace();

        }

当我知道输出date1时,我得到了这个: 9月30日星期三00:00:00 CEST 2015

我希望有人可以帮助我。这可能是一个简单的问题,但我不明白。

2 个答案:

答案 0 :(得分:2)

当您将date1打印为例如:

System.out.println(date1);

Java使用Date::toString()函数 - 因此您以默认格式打印日期。 如果要以不同方式打印,则需要使用格式化程序,例如:

System.out.println(sdToDate.format(date1));

答案 1 :(得分:0)

Answer by Joanna Kotuła是正确的,但使用旧类。我们现在有了更好的选择。

java.time

您正在使用过时的课程。在Java 8及更高版本中使用java.time框架。请参阅Tutorial

新类包含​​一个仅限日期值的类,没有时间或时区:LocalDate

标准格式

您的输入字符串格式接近ISO 8601标准使用的格式,但标准使用的是HYPHEN而不是FULL STOP,year-month-day。默认情况下,标准格式使用java.time类来解析和生成日期时间值的文本表示。所以,如果我是你,我只会replace字符,并避免费心去定义自定义解析格式。

String input = "2015.09.30".replace( "." , "-" );
LocalDate localDate = LocalDate.parse( input );

自定义格式

LocalDate上的toString方法会自动使用uuuu-MM-dd的标准ISO 8601格式。

如果要以自己的格式生成输出字符串,则需要定义自定义格式模式。使用java.time.format包。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd" );
String output = localDate.format( formatter );

您也可以使用该格式化程序进行解析。

LocalDate localDate = LocalDate.parse( "2015.09.30" , formatter );