Java 是否有一个好的*严格*日期解析器?
Java 是否有一个好的、严格 日期解析器? 我可以访问 Joda-Time,但我还没有看到这个选项。 我发现了“Java 是否有一个好的日期解析器”问题,虽然这是相关的,但它有点相反。 虽然这个问题要求一个宽松的、更模糊逻辑的、容易出现人为错误的解析器,但我想要一个严格的解析器。 例如,对于 JodaTime (据我所知)和 simpleDateFormat,如果您有格式“MM/dd/yyyy”:
解析此:40/40/4353
这将成为有效日期。 我想要一个解析器知道 40 是无效的月份和日期。 Java 中肯定存在这种实现吗?
Is there a good, strict date parser for Java? I have access to Joda-Time but I have yet to see this option. I found the "Is there a good date parser for Java" question, and while this is related it is sort of the opposite. Whereas that question was asking for a lenient, more fuzzy-logic and prone to human error parser, I would like a strict parser. For example, with both JodaTime (as far as I can tell) and simpleDateFormat, if you have a format "MM/dd/yyyy":
parse this: 40/40/4353
This becomes a valid date. I want a parser that knows that 40 is an invalid month and date. Surely some implementation of this exists in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我没有看到 Joda 将其识别为有效日期。 示例:
据我所知, DateFormat 与 setLenient(false)。 示例:
希望这有帮助!
I don't see that Joda recognizes that as a valid date. Example:
As best as I can tell, neither does DateFormat with setLenient(false). Example:
Hope this helps!
使用 DateFormat 进行严格验证的一个好方法是重新格式化已解析的日期并检查与原始字符串的相等性:
就像一个魅力一样。
A good way to do strict validation with DateFormat is re-formatting the parsed date and checking equality to the original string:
Works like a charm.
如果您不想使用
SimpleDateFormat
,您可以使用apache.commons.validator.routines.DateValidator
来验证日期。示例:
因此,如果返回 null,则表示日期无效,否则它是有效日期。此方法是使用
SimpleDateFormat
的替代方法,因为您不需要必须依靠抛出的异常来确定它是否是有效的日期。You can use the
apache.commons.validator.routines.DateValidator
to validate the date,if you do not want to useSimpleDateFormat
.Example :
So if a null is returned it means that the date is not valid otherwise it's a valid date.This method is an alternative to using the
SimpleDateFormat
as you don't have to rely on exception being thrown to identify if it's a valid date or not.