3

我正在使用mm/dd/yyyyString格式将多个包含日期的对象解析为对象DateSimpleDateFormatter

我面临的问题是,某些字符串包含完整的日期意味着它是mm/dd/yyyy,而某些字符串不包含年份并且采用这种格式mm/dd

我正在使用这种格式来解析日期MM/dd/yyyy但每次我得到一个只有月份和日期的字符串时,我都会得到解析异常。

我想知道,如果缺少年份字段,是否有任何方法可以使用0000之类的东西,或者我只需要将其处理为异常体?

4

4 回答 4

4

只需创建 2 个单独SimpleDateFormat的实例,一个是您拥有的,另一个是仅包含日期和月份的实例。您首先分析字符串并将其传递给正确的格式化程序。

或者将其传递给第一个,如果抛出异常,则将其传递给第二个。

于 2012-08-28T07:01:40.287 回答
2

据我所知,您可以创建一个不需要“一年”的 SimpleDateFormat 实例。所以只需使用 try-catch-Block

 try{
    //try formatting with simpledate instance with year
 }catch (Exception thrown when no year){
    try{
       //try formatting with simple date instace without year
    } catch (Exception e)
       //something went wrong both did not accept it
    }
}
于 2012-08-28T07:08:11.537 回答
0
ParseDate(String yourDate);
{
try {
Date reqDate=sdf.parse(yourDate);//sdf is instance of you date formatter
return reqDate;
} catch (ParseException e) {
return null;
e.printStackTrace();
}
}

尝试使用此功能。我认为它会起作用。如果抛出异常,则 null 将返回。通过这种方式,通过检查 null 我们知道它是否被正确解析。

于 2012-08-28T07:26:18.437 回答
-1

一个代码值一千个字......

        DateFormat df;
        Calendar c = Calendar.getInstance();
        String s = new String("12/25/2012");

        String[] arr = s.split("/");

        if(arr.length>2){

c.set(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]),Integer.parseInt(arr[2]));
        }
        else{

            c.set(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]));
        }

        df = DateFormat.getDateInstance(DateFormat.SHORT);

        System.out.println(df.format(c.getTime()));

您可以稍后使用) 方法将其转换回 Date 对象df.parse(...

于 2012-08-28T07:44:13.247 回答