java - Java SimpleDateFormat 接受无效日期。格式为 'MM/dd/yyyy' 解析 '01/01/2021anything'
问题描述
我正在尝试将字符串日期值解析为日期对象。如果提供的日期格式不正确,则必须抛出错误。试图用 来实现这一点SimpleDateFormat
,但它没有按预期工作。
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
sdf.setLenient(false);
Date d = sdf.parse("01/01/2021anything");
System.out.println(d);
对于上面的代码Fri Jan 01 00:00:00 GMT 2021
在我期望的地方得到输出ParseException
。有人可以解释为什么会发生这种情况以及我如何使用SimpleDateFormat
. 欣赏努力。
解决方案
发生这种情况是因为它是以这种方式实现的。
SimpleDateFormat
根据文档,将检查格式,并开始解析格式中存在的每个标记,但不一定解析整个字符串:
从给定字符串的开头解析文本以生成日期。该方法可能不会使用给定字符串的整个文本。
无论如何,您不应该使用SimpleDateFormat
and Date
,因为它们的问题比这个更多。
请改用包中的类java.time
。在您的情况下,您可能应该使用LocalDate
. 将您的代码简单翻译成代码使用java.time
将是这样的:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate d = LocalDate.parse("01/01/2021anything", formatter);
System.out.println(d);
上面提到的代码会抛出一个DateTimeParseException
,因为它不喜欢任何东西。
推荐阅读
- android - 用于活动的 Android Studio 单元测试
- javascript - 将一些 html 添加到带有 append 的 body 标记,但 html 的 id 不执行
- amazon-dynamodb - DynamoDB - 建模双向多对多关系?
- javascript - 如何将变量从javascript文件传递到服务器到ejs模板
- java - 如何使用 Java 下载远程文件
- c# - 无法使用 Office 互操作从 Outlook 中删除 400 多个联系人
- python - 如何同时从 python 发送和接收数据到 arduino
- sql - 如何合并表格并编辑一些结果?
- postgresql - PostgreSQL 中的行安全策略和分区
- java - Maven 创建 2 个归档文件