繁体   English   中英

当我将带有“ HH”模式的日期字符串传递给SimpleDateFormat时,为什么要返回日期?

[英]Why do I get a date back when I pass a date string with a “HH” pattern to the SimpleDateFormat?

这是我的代码:

try {
  DateFormat dateFormat = new SimpleDateFormat(pattern);
  dateFormat.setLenient(false);
  Date date = dateFormat.parse(value);
  if (date != null) {
    return true;
  }
} catch (ParseException e) {}

1.)当我将值传递为“ 01/07/2015”而模式传递为“ HH:mm”时,我正确地获得了异常。

2.)但是,当我将值传递为“ 01/07/2015”而模式传递为“ HH”时,我得到了“ Thu Jan 01 01:00:00 EST 1970” Date对象。

除了方案2,我还会抛出异常,因为给定的字符串完全不匹配给定的模式。 即使设置了setLenient(false),为什么也得到那个奇怪的日期?

JavaDoc很好地总结了为什么没有出现异常的原因:

抛出: ParseException-如果无法分析指定字符串的开头。

可以用HH解析01 ,因此也不例外。

http://download.java.net/jdk6/archive/b104/docs/api/java/text/Format.html#parseObject(java.lang.String)

parseObject
public Object parseObject(String source)
                   throws ParseException
Parses text from the beginning of the given string to produce an object. The method may not use the entire text of the given string

我想#1与分隔符不匹配。 您将/放在其中,尽管模式为:。

#2在HH之后立即停止匹配,因为它从给定字符串的开头解析文本,并且不使用给定字符串的整个文本。

我找到了解决此问题的方法。 为了解决我的问题,我只是将整个代码包装在if语句中,在其中检查模式的长度是否与值的长度相同,因为在使用此代码进行验证时它们应该是:

if(StringUtils.length(pattern) == StringUtils.length(value)) {
  try {
    DateFormat dateFormat = new SimpleDateFormat(pattern);
    dateFormat.setLenient(false);
    Date date = dateFormat.parse(value);
    if (date != null) {
      return true;
    }
  } catch (ParseException e) {}
}
return false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM