1

私はこのコードを実行しようとしています:

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.simpleFormatispublic static final String simpleFormat = "dd-MMM-yyyy"detailsBean.getDiscoveryProjectBean().getCreatedDate()have value likeの定義28-Feb-2013

この例外がスローされる理由がまったくわからず、助けが必要です。

4

2 に答える 2

4

私の推測では、問題はSimpleDateFormatデフォルト ロケールの使用方法にあると思います。ロケールで月の省略名として「Feb」が使用されていない場合、問題が発生します。したがって、すべてのデータが実際に英語である場合は、次のことが必要になる場合があります。

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

タイムゾーンの設定に関する部分に注意してください。繰り返しますが、SimpleDateFormat他に何も指定しない場合は、システムのデフォルトが使用されます。(「指定されたタイムゾーンの真夜中」の瞬間をDate値として取得します。)

また、組み込みの/型の代わりにJoda Timeを使用することを検討することを強くお勧めします。これは、はるかに優れた日付/時刻 API です。DateCalendar

于 2013-03-03T09:26:46.873 に答える
3
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ロケールでは正常に解析されましたが、ロシア語では失敗しました。

于 2013-03-03T09:27:44.507 に答える