Java DateFormat.parse认为第112街100号是日期(&Q) [英] Java DateFormat.parse thinks "100 112TH AVE NE" is a date

查看:0
本文介绍了Java DateFormat.parse认为第112街100号是日期(&Q)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用这里包含的代码来确定给定值是否为有效日期。在一个特定案例中,它评估以下街道地址:

第112大道100号

显然不是日期,但Java将其解释为:

美国东部标准时间12:00:00:00

有问题的代码:

String DATE_FORMAT = "yyyyMMdd";
try {
    DateFormat dfyyyyMMdd = new SimpleDateFormat(DATE_FORMAT);
    dfyyyyMMdd.setLenient(false);
    Date formattedDate;
    formattedDate = dfyyyyMMdd.parse(aValue);
    console.debug(String.format("%s = %s","formattedDate",formattedDate));
} catch (ParseException e) {
    // Not a date
}

控制台返回:

11:41:40.063调试测试值|FormattedDate=Sun Jan 12 00:00:00 EST 100

知道这里发生了什么吗?

推荐答案

parse方法不会在解析时验证整个字符串是否被使用;您可以在有效日期之后随机产生垃圾,一切都会正常进行。在这种情况下,100 112可以被成功解析为日期,但它可以。

,这有点令人惊讶。

您可以提供ParsePosition以验证分析时是否使用了整个字符串。

ParsePosition pos = new ParsePosition(0);
dfyyyyMMdd.parse(aValue, pos);
if (pos.getIndex() != aValue.length()) {
    // there's garbage at the end
}

这篇关于Java DateFormat.parse认为第112街100号是日期(&Q)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆