[英]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.