23

フォーマットする文字列は次のようになります:String datetime = "9/1/10 11:34:35 AM"

SimpleDateFormatの次のパターンが機能します。

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss");
Date d = sdf.parse(datetime);
System.out.println(d);

Output> [Wed Sep 01 11:34:35 CEST 2010]

ただし、AM / PMマーカーも解析する必要があり、それをパターンに追加すると、例外が発生します。

動作しないパターン:

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss a");

私はこれも同じ例外を除いて試しました:

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss aa");

例外:

java.text.ParseException: Unparseable date: "9/1/10 11:34:35 AM"

http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#textでAPIを調べましたが、どこが間違っているのかわかりません。

助言がありますか?

4

6 に答える 6

44

1 つの可能性は、デフォルトLocaleで AM/PM の記号が異なることです。Locale日付形式を作成するときは、システムのデフォルトを本当に使用したい場合を除き、常に を指定する必要がありますLocale。例:

SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)
于 2010-09-01T13:56:47.163 に答える
6

現代の答え:

    String datetime = "9/1/10 11:34:35 AM";
    LocalDateTime dt = LocalDateTime.parse(datetime, 
            DateTimeFormatter.ofPattern("M/d/yy h:mm:ss a", Locale.ENGLISH));

これにより、LocalDateTime2010-09-01T11:34:35 が生成されます。ただし、2 桁の年には注意してください。DateTimeFormatterは 2000 年から 2099 年を想定しています。私の誕生日の場合、これは正しくありません。

まだロケールを提供する必要があります。AM/PM マーカーは、英語以外のロケールでは実際にはほとんど使用されていないためLocale.ENGLISH、かなり安全な賭けであると考えました。ご自分で代用してください。

他の回答は、2010年と2011年の良い回答でした。2014年にはすでに上記が有効であり、私はそれを好んだでしょう。

于 2017-06-16T19:18:26.513 に答える
3

以下に示す日付の例を取り上げ、要件に適合する場合は、書式設定された日付を 24 時間形式で出力します。

 String inputdate="9/1/10 11:34:35 AM";
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd/MM/yy hh:mm:ss aa",Locale.getDefault());
        try {
            System.out.println(""+new SimpleDateFormat("dd/MM/yy HH:mm:ss",Locale.getDefault()).format(simpleDateFormat.parse(inputdate)));

        } catch (ParseException e) {
            e.printStackTrace();
        }

まだ質問がある場合は、返信してください。ありがとう。

于 2014-11-27T11:43:09.247 に答える
0

FreeMarker for Java を使用していて、この問題にポップする場合は、以下のコードを使用してください。私はこの問題を抱えていました。私のロケールは AM/PM を DE に設定していました。理由がわからない... <#setting locale="en_US">

于 2011-10-28T10:06:54.927 に答える