フォーマットする文字列は次のようになります。Stringdatetime= "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を調べましたが、どこにあるのかわかりません。間違ってください。
助言がありますか?
1つの可能性は、デフォルトのLocale
のAM/PMの記号が異なることです。日付形式を作成するときは、システムのデフォルトのLocale
を本当に使用したい場合を除いて、常にLocale
を指定する必要があります。例:
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)
以下に示す日付の例を取り上げ、要件に合う場合は、フォーマットされた日付を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();
}
それでも質問がある場合は、返信してください。ありがとう。
現代の答え:
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));
これにより、2010-09-01T11:34:35のLocalDateTime
が生成されます。ただし、2桁の年に注意してください。 DateTimeFormatter
は2000年から2099年までを想定しています。私の誕生日の場合、これは正しくありませんでした。
ロケールを指定する必要があります。 AM/PMマーカーは英語以外のロケールでは実際にはほとんど使用されないため、Locale.ENGLISH
はかなり安全な方法だと思いました。自分で代用してください。
他の答えは2010年と2011年の良い答えでした。すでに2014年に上記は有効であり、私はそれを好んだでしょう。
FreeMarker for Javaで、この問題をポップする場合は、以下のコードを使用してください。この問題が発生したため、ロケールでAM/PMがDEに設定されました。理由はわかりません...<#setting locale="en_US">