当前位置: 首页 > 面试题库 >

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

山乐生
2023-03-14
问题内容

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中完成此操作。


问题答案:

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

format.setLenient(false);

应该这样做。



 类似资料:
  • 问题内容: 我正在尝试从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-AUG-12)。 运行导入向导时,一切正常,直到必须精确调整列/字段映射。我有一个免责声明,说所选格式与表字段定义不匹配(我的字段是日期字段)。插入脚本的示例: 当我尝试运行此查询时,出现以下错误: ORA-01843:无效月份01843。00000-“无效月份” 如您所见,

  • 我需要此格式MonthDay,示例 但我得到的格式是: 我需要做什么?

  • 我试图从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-aug-12)。 编辑:我的约会语言匹配器设置为“法语”。我可以改成“美国”吗?

  • 我得到java.sql.sqlDataException:ORA-01843:运行时不是一个有效的月份。任何帮助都很感激!

  • 问题内容: 我的strings.xml中有这样的字符串: 我在代码中像这样使用它们: 但是它以小写形式显示日期和月份,我希望将两者都大写。我该如何实现? 问题答案: 我像这样修复它:

  • 下面是我的Oracle过程中的代码: 有什么想法吗?