使用SimpleDateFormat、Java进行的日期解析不正确

2022-08-24 00:00:00 parse-error simpledateformat java

我需要使用日期模式"yyyy-MM-dd"从输入字符串分析日期,如果日期将以任何其他格式出现,则引发错误。

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

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());
  }

}

当我在myDate中输入"2011-06-12"这样的字符串时,我会得到输出"Tsinghua Sep 29 00:00:00 EEST 2011",这很好。

当我发送了像"2011-0612"这样的错误字符串时,我收到了预期的错误。

当我试图传递一个仍然有两个"连字符"但位数错误的字符串时,问题就开始了。 示例:

输入字符串"2011-06-1211" 结果"EST 2014年9月23日00:00:00"。

输入字符串"2011-1106-12" 结果"2月12日星期一00:00:00东部时间2103"。

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

如何避免?


解决方案

您是否尝试在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...)

相关文章