当前位置:  开发笔记 > 编程语言 > 正文

Java有一个好的*严格*日期解析器吗?

如何解决《Java有一个好的*严格*日期解析器吗?》经验,为你挑选了2个好方法。

Java 是否有一个好的,严格的日期解析器?我可以访问Joda-Time,但我还没有看到这个选项.我发现"有一个很好的Java日期解析器"问题,虽然这是相关的,但却恰恰相反.虽然这个问题是要求一个宽松,更模糊逻辑和容易出现人为错误的解析器,但我想要一个严格的解析器.例如,对于JodaTime(据我所知)和simpleDateFormat,如果您的格式为"MM/dd/yyyy":

解析这个:40/40/4353

这将成为有效日期.我想要一个知道40是无效月份和日期的解析器.当然,Java中存在一些这样的实现?



1> yawmark..:

我没有看到Joda认为这是一个有效的日期.例:

strict = org.joda.time.format.DateTimeFormat.forPattern("MM/dd/yyyy")
try {
    strict.parseDateTime('40/40/4353')
    assert false
} catch (org.joda.time.IllegalFieldValueException e) {
    assert 'Cannot parse "40/40/4353": Value 40 for monthOfYear must be in the range [1,12]' == e.message
}



作为最好的,我可以告诉大家,同样没有日期格式与setLenient(假).例:

try {
    df = new java.text.SimpleDateFormat('MM/dd/yyyy')
    df.setLenient(false)
    df.parse('40/40/4353')
    assert false
} catch (java.text.ParseException e) {
    assert e.message =~ 'Unparseable'
}

希望这可以帮助!



2> Rolf..:

使用DateFormat进行严格验证的一种好方法是重新格式化解析日期并检查与原始字符串的相等性:

String myDateString = "87/88/9999";
Date myDate = dateFormat.parse(myDateString);
if (!myDateString.equals(df.format(myDate))){
  throw new ParseException();
}

奇迹般有效.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有