Java 如果我有几个格式不同的字符串,我是否需要一个单独的DateFormat实例来解析每个字符串?

Java 如果我有几个格式不同的字符串,我是否需要一个单独的DateFormat实例来解析每个字符串?,java,date-format,scjp,Java,Date Format,Scjp,我正在努力学习DateFormat的parse()和format()方法在SCJP6考试中的细节。我最近尝试编写一些代码来格式化和解析日期,发现只有当字符串的格式与DateFormat实例的格式匹配时,解析方法才有效。这是否意味着,如果我在现实生活中使用这个类并阅读一个以6种不同方式格式化日期的文档,我需要6个不同的DateFormat对象才能成功地将字符串解析为日期对象 import java.util.*; import java.text.*; import java.io.Console

我正在努力学习DateFormat的parse()和format()方法在SCJP6考试中的细节。我最近尝试编写一些代码来格式化和解析日期,发现只有当字符串的格式与DateFormat实例的格式匹配时,解析方法才有效。这是否意味着,如果我在现实生活中使用这个类并阅读一个以6种不同方式格式化日期的文档,我需要6个不同的DateFormat对象才能成功地将字符串解析为日期对象

import java.util.*;
import java.text.*;
import java.io.Console;

class PlayWithDates {
    public static void main(String[] args) {
    String formatted = "";
    Date parsed;
    Date d1 = new Date();
    DateFormat defaultFormat = DateFormat.getDateInstance();
    DateFormat shortFormat = DateFormat.getDateInstance(DateFormat.SHORT);
    formatted = defaultFormat.format(d1);
    System.out.println(formatted);
    formatted = shortFormat.format(d1);
    System.out.println(formatted instanceof String);
    System.out.println(formatted);  

    try {
        parsed = shortFormat.parse(formatted);
        System.out.println(parsed); 
    } catch(ParseException pe) {
        System.out.println(pe);
    }
    try {
        parsed = defaultFormat.parse(formatted);
        System.out.println(parsed); 
    } catch(ParseException pe) {
        System.out.println(pe);
    }
    }
}
当我运行此程序时,我得到:

Dec 11, 2013
true
12/11/13
Wed Dec 11 00:00:00 MST 2013
java.text.ParseException: Unparseable date: "12/11/13"

在我看来,很难预测字符串何时可解析。我是否应该以某种方式使用日历实例执行此操作?谢谢你的解释。为了这次考试,我学习有点疯狂。

因为
SimpleDataFormat
接受构造函数中的格式规范,所以每个格式都需要单独的此类实例

对于每个不同格式的字符串,您需要一个DateFormat实例来支持它…哎哟。因此,如果要解析日期文档,您需要预测日期将采用何种格式,然后为每种可能的格式创建一个DateFormat实例,并尝试/捕获,直到解析成功?这听起来似乎很难赶上考试。你能做的(以及Apache Commons所做的)是创建一个可能的日期格式列表,然后简单地在列表上迭代,直到Wand成功…或者格式用完。你必须记住,给定一个“12”的值,不可能知道这是一天、一个月还是一年……足够公平。我认为12/3/12可以理解为12月3日或3月12日。正如我所预料的,要解决的问题比我最初预期的要困难得多。DateFormat有一个无参数构造函数,可以如下使用:DateFormat df=DateFormat.getInstance()或选项DateFormat df=DateFormat.getDateInstance()