我想使用格式为“yyyymmdd”的 simpleDateFormat 验证和解析日期 这也允许 100624,它被解析为 10 年(朱利叶斯·凯撒去世 54 年后)。日期也会是 1970 年,所以我不想与 SimpleDateFornat("yymmdd") 达成一致。
我想知道有没有办法使用 SimpleDateFormat 强制使用四位数的年份格式?我即将提前进行正则表达式测试,但也许有一种聪明的方法可以使用 (Simple)DateFormat()?
根据要求的代码,事情变得越来越复杂,我的研究只完成了一半。使用的格式是 yyyy-MM-dd 开始(它来自一个变量,它有一个错误的 javadoc)。但是,正如下面的答案所示 yyyyMMdd 确实强制使用四年数字。所以我的问题变成了如何为“yyyy-MM-dd”格式强制一个四位数的年份。为什么“yyyyMMdd”表现不同?
public void testMaturity() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);
System.out.println(" " + sdf.format(sdf.parse("40-12-14")));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");
sdf.setLenient(false);
System.out.println(" " + sdf2.format(sdf2.parse("401214")));
fail();
} catch (ParseException pe) {
assertTrue(true);
}
打印 0040-12-14
最佳答案
只需使用 yyyyMMdd
(注意:大写 M 用于表示月份,否则 you're parsing minutes !)然后检查年份是否大于某个截止日期(例如,在解析出生日期时, 大于 1800 是一个安全的选择,当解析大于或等于当前年份的即将到来的日期时会很好)。
https://stackoverflow.com/questions/3108561/