2012-05-15 128 views
6

我需要使用日期模式“yyyy-MM-dd”解析输入字符串中的日期,如果日期将以任何其他格式出现,则会引发错误。错误日期解析使用SimpleDateFormat,Java

这是我的一段代码,我解析日期:

private void validateDate() throws MyException { 
    Date parsedDate; 
    String DATE_FORMAT = "yyyy-MM-dd"; 
    try{ 
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate()); 
    System.out.println(parsedDate); 
    } catch (ParseException e) { 
    throw new MyException(“Error occurred while processing date:” + getMyDate()); 
    } 

} 

当我有字符串,如“2011-06-12”作为输入MyDate中我会得到输出“周四9月29日00:00 :00 EEST 2011“,这很好。

当我发送了一个不正确的字符串,如“2011-0612”,我得到了预期的错误。

问题开始,当我试图传递一个仍然有两个“连字符”,但数字数字错误的字符串。 例如:

输入字符串“2011-06-1211” 结果“2014年2月23日星期二00:00:00 EEST”。

输入字符串“2011-1106-12” 结果“Mon Feb 12 00:00:00 EET 2103”。

我无法更改字符串日期的输入格式。

我该如何避免它?

+1

我不知道如何“2011年6月12日”作为myDate输入我会得到输出“Thu Sep 29 00:00:00 EEST 2011”是好的。您应该将6月12日作为输出 - 不是9月29日... –

回答

9

您是否试过在SimpleDateFormat上致电setLenient(false)

import java.util.*; 
import java.text.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     format.setLenient(false); 
     Date date = format.parse("2011-06-1211"); // Throws... 
     System.out.println(date); 
    } 
} 

请注意,我也建议设置您SimpleDateFormat的时区和语言环境。 (或者,使用Joda Time代替...)

+0

谢谢您的回答。我会运行测试并给你反馈。但目前看起来问题已解决。 – AndrewVP

+0

在simpleDateFormat中,它总是返回错误的月份。这是什么原因? –

+0

@AnandSavjani:不,它不。我不能告诉你在做什么错误的信息,但SimpleDateFormat工作相当合理。如果你认为这个问题已经解决,我建议你用一个简短但完整的程序来提出一个新问题来证明问题。 –