SimpleDateFormat 给出错误的日期而不是错误
我正在使用以下模式和日期
日期:13-13-2007
模式:dd-MM-yyyy
输出:Sun Jan 13 00:00:00 IST 2008 或者 2008-01-13 00:00:00.0
我期待这里出现异常。当给定日期不正确时,我可以做什么来生成异常。
I am using following pattern and date
Date : 13-13-2007
Pattern : dd-MM-yyyy
Output: Sun Jan 13 00:00:00 IST 2008
Or
2008-01-13 00:00:00.0
I was expecting exception here. What can i do to generate exception when given date is inproper.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
DateFormat.setLenient (false)
告诉DateFormat
/SimpleDateFormat
您希望它是严格的。Use
DateFormat.setLenient(false)
to tell theDateFormat
/SimpleDateFormat
that you want it to be strict.Set Lenient 适用于大多数情况,但如果您想检查确切的字符串模式,那么这可能会有所帮助,
如果您输入“03/06/1988”,那么您将获得有效的结果。
Set Lenient will work for most cases but if you wanna check the exact string pattern then this might help,
If you give the input as "03/06/1988" then you'll get valid result.
java.time
我想贡献现代答案。当 2011 年提出这个问题时,使用
SimpleDateFormat
和Date
是合理的。现在已经不是了。这些类的设计总是很糟糕,并于 2014 年被现代 Java 日期和时间 API java.time 所取代,因此现在早已过时了。此代码给出了您所期望的异常(并且有充分的理由期望):
另请注意并享受准确且信息丰富的异常消息。
DateTimeFormatter
具有三种所谓的解析器样式:严格、智能和宽松。智能是默认设置,您很少需要其他任何东西。如果您想确保在所有情况下捕获所有无效日期,请使用 strict。链接
uuuu
与Java 中
格式化模式代码?DateTimeFormatter
中的 yyyyjava.time
I should like to contribute the modern answer. When this question was asked in 2011, it was reasonable to use
SimpleDateFormat
andDate
. It isn’t anymore. Those classes were always poorly designed and were replaced by java.time, the modern Java date and time API, in 2014, so are now long outdated.This code gives the exception you had expected (and had good reason to expect):
Please also notice and enjoy the precise and informative exception message.
DateTimeFormatter
has three so-called resolver styles, strict, smart and lenient. Smart is the default, and you will rarely need anything else. Use strict if you want to be sure to catch all invalid dates under all circumstances.Links
uuuu
versusyyyy
inDateTimeFormatter
formatting pattern codes in Java?