Java 无法解析的日期格式差异

标签 java date java.util.date

如何区分数据输入是 (a) 无效日期还是 (b) 无效格式?

我有以下代码用于处理文本文件中的日期输入。

    public boolean dateIsValid(String date) {
        DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");          
        formatter.setLenient(false);
            try {
                Date dateParsed = (Date) formatter.parse(date);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return false;

        }

我的一切都如我所愿。我遇到的唯一问题是我无法区分抛出的不同解析异常。例如:

if String date = 18/10/2012 --> java.text.ParseException: Unparseable date: "18/10/2012"
if String date = 2-12-2001 --> java.text.ParseException: Unparseable date: "2-12-2001"

如您所见,两种错误的格式都会引发相同的错误。我怎样才能区分它们以便以不同的方式处理它们?

编辑

更准确地说,对于日期 18/10/2012,我应该抛出无效日期错误,对于日期 2-12-2001,我需要抛出无效格式异常。我不需要处理不同的格式。我只需要一种方法来为这两种不同的情况获取不同的异常。

最佳答案

问题似乎出在这一行

DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");  

对于第一个错误,看起来日期在前,月份在后,所以它应该是这样的

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 

第二个错误显示提供的日期格式不正确,因为它包含 - 而您期望的格式包含 / ie like

DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");

如果你想处理不同的格式,那么试试这样:

String[] formatDates= {"MM/DD/yyyy", "dd/MM/yyyy", "MM-dd-yyyy","dd-MM-yyyy"};

Date tryParse(String dateString)
{
    for (String formatDate: formatDates)
    {
        try
        {
            return new SimpleDateFormat(formatDate).parse(dateString);
        }
        catch (ParseException e) {}
    }

    return null;
}

关于Java 无法解析的日期格式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25751917/

相关文章:

java - Android Java - 解析 "76"时出现 NumberFormatException

java - 如何设置java.util.Date的时区?

java - 您将如何在Java模型中表示出生日期?

java - Lucene 长字段错误

java - 通过 java -jar 执行失败,而相同的代码通过 eclipse 运行良好

java - 设置图像时操作栏标题消失

java - Hibernate 返回 util.Date as long

c# - sqlite 添加 x 天至今(x 存储在表中)

python - 仅在 pandas 系列日期时间索引中重新设置日期

java - 关于 java.util.Calendar 的问题