一尘不染

使SimpleDateFormat.parse()在无效日期失败(例如,月份大于12)

java

java.text.SimpleDateFormat用来解析形式的字符串"yyyyMMdd"

如果我尝试解析一个大于12的月份的字符串,而不是失败,它将延续到下一年。完全可运行的复制:

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抛出。

是否有任何非hacky方式强制发生异常?我的意思是,我不想手动检查月份是否大于12。这太荒谬了。

感谢您的任何建议。

注意:我已经了解Joda Time,但是我需要在没有外部库的普通JDK中完成此操作。


阅读 307

收藏
2020-09-08

共1个答案

一尘不染

您需要使其不宽容。从而,

format.setLenient(false);

应该这样做。

2020-09-08