【发布时间】:2016-01-03 12:22:15
【问题描述】:
我需要将字符串转换为具有精确格式的日期 (dd/MM/yyyy) 我写了这个方法:
public static Date toDate(String input, String format) throws DateConverterException {
if (StringUtils.isEmpty(input) || StringUtils.isEmpty(format)) {
throw new DateConverterException (String.format("Input %s or format %s is empty or", input, format));
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setLenient(false);
Date date = null;
try {
date = sdf.parse(input);
} catch (ParseException e) {
throw new DateConverterException (e);
}
return date;
}
所以如果输入日期是 "06/10/" ,就会抛出异常 = 好 但是如果输入日期是“06/10/1”,尽管格式不受尊重,但仍会构造日期
任何帮助将不胜感激 非常感谢
【问题讨论】:
-
无法复制。当我测试时,这是抛出:“java.text.ParseException: Unparseable date: "06/10/0""
-
@Tunaki 真的吗?我不明白,当我使用参数进行测试时:“06/10/2”,“dd/MM/yyyy”,尽管它不应该构建日期,但它仍然是构造的
-
@azurefrog 是的,对不起,我以 0 为例,但确实抛出了异常。现在尝试使用 06/10/1 或 06/10/2,它将构造日期。谢谢
-
一点点挖掘表明 SimpleDateFormat 在严格的日期解析方面很糟糕。 This answer 提倡解析后双重检查,this answer 有办法扩展类强制严格解析。