簡體   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