3

形式で表示される日付を解析しようとしています"01-26-2012 03:07 AM"

私はこれを作成しましたSimpleDateFormat

private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a");

それでも、毎回次を解析します。

String date = "01-26-2012 03:07 AM";
Date myDate =  DATE_FORMAT.parse(date.trim()); 

私は得るParseException

java.text.ParseException: 解析できない日付: "01-26-2012 03:07 AM" at java.text.DateFormat.parse(DateFormat.java:337)

私のSimpleDateFormat文字列は正しいですか?解析を妨げている可能性のあるものは他にありますか?

4

2 に答える 2

3

ほとんどの場合、ロケールの問題です。たとえば、英語のロケールで試してみると、うまくいくはずです:

DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.ENGLISH);

ロケールを指定しないため、システムのデフォルトのロケールが使用され、「AM」が正しく解析されない可能性があります。

以下のコードは出力します

myDate = Thu Jan 26 03:07:00 GMT 2012

public static void main(String[] args) throws Exception {
    String date = "01-26-2012 03:07 AM";
    DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.ENGLISH);
    Date myDate = DATE_FORMAT.parse(date.trim());
    System.out.println("myDate = " + myDate);
}

補足として、コードをLocale.CHINESEたとえば次のように変更すると、解析例外が発生します。

于 2012-11-26T22:20:01.310 に答える
0

スレッドセーフSimpleDateFormatではないため、静的オブジェクトとして使用することは正しくありません。それがここでの問題であるとは言えませんが、ポインタである可能性があります。

于 2012-11-26T23:34:45.507 に答える