簡體   English   中英

SimpleDateFormat ParseException:無法解析的日期

[英]SimpleDateFormat ParseException : Unparseable date

我正在嘗試執行以下代碼:

Date date = null;
if (detailsBean.getDiscoveryProjectBean ().getCreatedDate ()==null || 
    detailsBean.getDiscoveryProjectBean ().getCreatedDate ().equalsIgnoreCase(""))
{
    projectDetails.getDiscoveryProject().setCreationTime(new Date());
}
else
{
    try 
    {
        date = new SimpleDateFormat (FormatUtils.simpleFormat).
            parse (detailsBean.getDiscoveryProjectBean ().getCreatedDate ());
    } catch (Exception e) {
        throw new PanDaApplicationException (e.getMessage ());
    }
    projectDetails.getDiscoveryProject().setCreationTime(date);
}

在try塊中,拋出ParseException異常。 我不知道原因,但是代碼看起來不錯。 FormatUtils.simpleFormat的定義是public static final String simpleFormat = "dd-MMM-yyyy"並且detailsBean.getDiscoveryProjectBean().getCreatedDate()值類似於28-Feb-2013

我真的不知道為什么會拋出此異常,我需要幫助。

我的猜測是問題出在SimpleDateFormat使用默認語言環境的方式上-如果您的語言環境不使用“ Feb”作為月份的縮寫名稱,那么您將遇到問題。 因此,如果您所有的數據實際上都是英文的,則可能需要:

DateFormat format = new SimpleDateFormat(FormatUtils.simpleFormat, Locale.US);
format.setTimeZone(...); // See below
date = format.parse(detailsBean.getDiscoveryProjectBean().getCreatedDate());

請注意有關設置時區的部分。 同樣,如果您未指定其他任何內容,則SimpleDateFormat將使用系統默認值。 (您將獲得“在指定時區的午夜”的瞬間作為Date值。)

我也強烈建議您考慮使用Joda Time而不是內置的Date / Calendar類型-這是更好的日期/時間API。

Locale.setDefault (Locale.ROOT);
System.out.println (new SimpleDateFormat ("dd-MMM-yyyy").parse ("28-Feb-2013"));
Locale.setDefault (Locale.forLanguageTag ("ru"));
System.out.println (new SimpleDateFormat ("dd-MMM-yyyy").parse ("28-Feb-2013"));

對我來說輸出是:

Thu Feb 28 00:00:00 MSK 2013
Exception in thread "main" java.text.ParseException: Unparseable date: "28-Feb-2013"
    at java.text.DateFormat.parse(DateFormat.java:357)
    at DateFormat.main(DateFormat.java:19)

因此,同一日期可以用ROOT語言環境成功解析,但不能使用俄語。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM