Java日期解析特定格式

Java日期解析特定格式,java,parsing,date,Java,Parsing,Date,我写了一段代码来暴露我的问题 public class date { public static void main(String args[]) { SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy",Locale.ENGLISH); System.out.println("The date format is : dd-MM-yyyy."); String dat

我写了一段代码来暴露我的问题

public class date {
    public static void main(String args[]) {
        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy",Locale.ENGLISH);
        System.out.println("The date format is : dd-MM-yyyy.");
        String date1 = "20-06-2012";
        System.out.println("The date1 is : " + date1);
        String date2 = "2012-06-20";
        System.out.println("The date2 is : " + date2);
        try {
            System.out.println(formatter.parse(date1).toString());
            System.out.println(formatter.parse(date2).toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
输出如下所示:

The date format is : dd-MM-yyyy.
The date1 is : 20-06-2012
The date2 is : 2012-06-20
Wed Jun 20 00:00:00 EDT 2012
Mon Dec 03 00:00:00 EST 25
问题是,当提交的日期与
SimpleDateFormat
中指定的模式不匹配时,我希望出现一个错误,不幸的是,它似乎在字符串中看到了由破折号分隔的正确位置的数字,所以它可以通过。是否有其他工具可以执行此操作,或者我是否错误地使用了
SimpleDataFormat

用于绕过SDF解析启发式


然后切换到;)

正如其他答案所说,您必须定义一个适合您的数据的格式化程序

java.time Java8和更高版本与新框架()捆绑在一起。这些新类取代了旧的java.util.Date/.Calendar&java.text.SimpleDataFormat类,这些类已经被证明是如此混乱和麻烦。这个新框架的灵感来自于项目定义并扩展的非常成功的库

另外,java.time包含一个类,它只表示一个日期,而不表示一天中的时间和时区,正如您在问题中所做的那样

格式化模式的定义方式类似于java.text.simpleDataFormat,但可能略有不同。一定要好好学习

转储到控制台

System.out.println( "localDate : " + localDate );
跑步的时候

本地日期:2012-06-20

这里不需要语言环境 此处不需要,因为您的数据中没有要翻译的月份或星期几的名称


有关何时在解析/生成日期时间值的字符串表示形式时使用区域设置的更多信息,请参阅。

+1以获取Joda time。对于新的应用程序,也值得考虑[JSR 310]()。上一次我听说它仍在Java8的轨道上。@ErikP我希望如此;这肯定已经足够长了:/
System.out.println( "localDate : " + localDate );