2012-05-15 146 views
6

我需要使用日期模式「yyyy-MM-dd」解析輸入字符串中的日期,如果日期將以任何其他格式出現,則會引發錯誤。錯誤日期解析使用SimpleDateFormat,Java

這是我的一段代碼,我解析日期:

private void validateDate() throws MyException { 
    Date parsedDate; 
    String DATE_FORMAT = "yyyy-MM-dd"; 
    try{ 
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate()); 
    System.out.println(parsedDate); 
    } catch (ParseException e) { 
    throw new MyException(「Error occurred while processing date:」 + getMyDate()); 
    } 

} 

當我有字符串,如「2011-06-12」作爲輸入MyDate中我會得到輸出「週四9月29日00:00 :00 EEST 2011「,這很好。

當我發送了一個不正確的字符串,如「2011-0612」,我得到了預期的錯誤。

問題開始,當我試圖傳遞一個仍然有兩個「連字符」,但數字數字錯誤的字符串。 例如:

輸入字符串「2011-06-1211」 結果「2014年2月23日星期二00:00:00 EEST」。

輸入字符串「2011-1106-12」 結果「Mon Feb 12 00:00:00 EET 2103」。

我無法更改字符串日期的輸入格式。

我該如何避免它?

+1

我不知道如何「2011年6月12日」作爲myDate輸入我會得到輸出「Thu Sep 29 00:00:00 EEST 2011」是好的。您應該將6月12日作爲輸出 - 不是9月29日... –

回答

9

您是否試過在SimpleDateFormat上致電setLenient(false)

import java.util.*; 
import java.text.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     format.setLenient(false); 
     Date date = format.parse("2011-06-1211"); // Throws... 
     System.out.println(date); 
    } 
} 

請注意,我也建議設置您SimpleDateFormat的時區和語言環境。 (或者,使用Joda Time代替...)

+0

謝謝您的回答。我會運行測試並給你反饋。但目前看起來問題已解決。 – AndrewVP

+0

在simpleDateFormat中,它總是返回錯誤的月份。這是什麼原因? –

+0

@AnandSavjani:不,它不。我不能告訴你在做什麼錯誤的信息,但SimpleDateFormat工作相當合理。如果你認爲這個問題已經解決,我建議你用一個簡短但完整的程序來提出一個新問題來證明問題。 –