使SimpleDateFormat.parse()在无效date失败(例如,月份大于12)
我使用java.text.SimpleDateFormat
来parsing"yyyyMMdd"
forms的string。
如果我试图parsing一个大于12的月份的string,而不是失败,它会翻到下一年。 完全可运行的repro:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ParseDateTest { public static void main(String[] args) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); Date result = format.parse("20091504"); // <- should not be a valid date! System.out.println(result); // prints Thu Mar 04 00:00:00 CST 2010 } }
我宁愿抛出一个ParseException
。
有没有强迫exception发生的非哈希方式? 我的意思是,我不想手动检查月份是否大于12。这太荒谬了。
感谢您的任何build议。
注:我已经知道Joda时间,但我需要在普通的JDK没有外部库完成。
你需要使它不宽容 。 从而,
format.setLenient(false);
应该这样做。
您可以使用Java 8时间API。 例如,如果你使用一个值为15
的月份:
String strDate = "20091504"; TemporalAccessor ta = DateTimeFormatter.ofPattern("yyyyMMdd").parse(strDate);
你将直接有一个例外
Exception in thread "main" java.time.format.DateTimeParseException: Text '20091504' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 15