2

で日付を解析しようとしていますSimpleDateFormatが、奇妙な動作に遭遇しました。

"Sun Jan 01 19:00:32 CET 2012"この例は私のマシンに印刷されます:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Test {
    public static void main(String[] args) throws ParseException {
        System.out.println(new SimpleDateFormat("MMM dd HH:mm:ss YYYY", Locale.ENGLISH).parse("Sep 26 19:00:32 2012"));
    }
}

"Wed Sep 26 19:00:32 CET 2012"代わりに戻ってきたと思います。

私の DateFormat 文字列は正しくありませんか?

4

3 に答える 3

10

年は小文字を使用しyます。

System.out.println(new SimpleDateFormat("MMM dd HH:mm:ss yyyy", Locale.ENGLISH).
            parse("Sep 26 19:00:32 2012"));

javadoc によると、大型キャップYは「週の年」です。

于 2012-09-26T17:12:50.050 に答える
2

yyyy(大文字) の代わりに (小文字) を使用しYYYYます。週年Yです。一方はです。y

Yまた、このパターンはJava 7でのみ導入されたことにも注意してください。これにより、エラーが表示される理由を説明できます。ドキュメントによると:

週年 'Y' が指定されていて、カレンダーがどの週年もサポートしていない場合、代わりに暦年 ('y') が使用されます。週の年のサポートは、getCalendar().isWeekDateSupported() を呼び出してテストできます。

このデモGregorianCalendarでわかるように、Java 7 と を使用すると、コードは問題なく動作します。

于 2012-09-26T17:12:51.630 に答える
0

問題は、フォーマットではなく日付の解析にあります。解析で new Date() を渡してみて、結果を確認し、それに応じてフォーマットを変更してください。

于 2012-09-26T17:13:52.473 に答える