Java 使用验证解析日期

Java 使用验证解析日期,java,android,validation,parsing,date,Java,Android,Validation,Parsing,Date,我目前正试图解析日期(和时间),将它们从历元转换为毫秒 为此,我使用SimpleDataFormat对以下代码进行解析: public static long parseDate(String date) { // Parse SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.US); Date parsedDate = format.parse(date); // Get milliseco

我目前正试图解析日期(和时间),将它们从历元转换为毫秒

为此,我使用SimpleDataFormat对以下代码进行解析:

public static long parseDate(String date) {
  // Parse
  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
  Date parsedDate = format.parse(date);

  // Get milliseconds
  Calendar cal = new GregorianCalendar();
  cal.setTime(parsedDate);
  return cal.getTimeInMillis();
}
我发现SimpleDataFormat确实允许解析1970-00-00,解析为1969-11-30。仔细想想,这完全有道理。当解析器只是对所有内容进行“求和”时,1969年实际上被理解为“1969-11-30”,并且0个月时不会发生“年溢出”。 不幸的是,我没有更改任何该日期无效的内容(至少我了解日期)

有没有办法通过不使用第三方libs或java8(目标是Android)来增加有效性,或者必须坚持使用regex和手工验证


提前谢谢你

呃,我很抱歉发布了这个问题

答案是通过以下方式禁用宽容标志:

format.setLenient(false);
我不删除这个问题,所以如果有人无意中发现了这个问题,就不需要花几个小时来考虑如何改变它。。。希望有帮助

这也引出了一个问题:为什么默认情况下会启用此标志