DateTimeFormatter auto-corrects invalid (syntactically possible) calendar date(DateTimeFormatter 自动更正无效(语法上可能)的日历日期)
问题描述
Java DateTimeFormatter 当您尝试超出可能范围的日期时抛出异常,例如:
Java DateTimeFormatter throws an exception for when you try a date that goes outside of a possible range, for example:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/yyyy");
String dateString = "12/32/2015";
LocalDate ld = LocalDate.parse(dateString, dtf);
将抛出:
Exception in thread "main" java.time.format.DateTimeParseException: Text '12/32/2015' could not be parsed: Invalid value for DayOfMonth (valid values 1 - 28/31): 32
但是当我输入一个无效的日历日期,根据他们的标准,它在语法上仍然是可能的,它会自动将其更正为有效日期,例如:
But when I enter an invalid calendar date that is still syntactically possible by their standards, it autocorrects it to be a valid date, for example:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/yyyy");
String dateString = "2/31/2015";
LocalDate ld = LocalDate.parse(dateString, dtf);
它成功解析但自动更正为 2015-02-28.我不希望这种行为,我希望它在日期不是有效的日历日期时仍然抛出异常.有没有我可以设置的内置选项来实现这一点,还是我真的必须尝试手动筛选出这些实例?
it successfully parses but autocorrects to 2015-02-28. I don't want this behavior, I want it to still throw an exception when the date is not a valid calendar date. Is there a built-in option I can set for that to happen, or do I really have to try to manually sift out these instances?
推荐答案
您可以使用 STRICT 解析器样式:
You can use a STRICT resolver style:
import static java.time.format.ResolverStyle.STRICT;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/uuuu").withResolverStyle(STRICT);
默认情况下,ofPattern 使用 一种 SMART 解析器样式,它将使用合理的默认值.
By default, ofPattern uses a SMART resolver style which will use reasonable defaults.
请注意,我使用的是 uuuu 而不是 yyyy,即 YEAR 而不是 YEAR_OF_ERA.假设您使用的是公历系统,则两者在当前时代(第 1 年或更大)中的年数相等.上面的链接中更详细地解释了差异.
Note that I have used uuuu instead of yyyy, i.e. YEAR instead of YEAR_OF_ERA. Assuming you are in a Gregorian calendar system, the two are equivalent for years in the current era (year 1 or greater). The difference is explained in more details in the links above.
这篇关于DateTimeFormatter 自动更正无效(语法上可能)的日历日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:DateTimeFormatter 自动更正无效(语法上可能)的日历日
基础教程推荐
- 存储 20 位数字的数据类型 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
