0

いくつかの文字列を日付に解析し、別のスタイルで日付を文字列にフォーマットしたいと考えています。年を含まない日時文字列を解析すると、次のパズルが見つかりました。2 つの異なる入力文字列がありますが、出力は同じです。本当に混乱しています。これを修正する方法はありますか?ありがとう。

System.out.println(parseAndFormat("MAR 22 12:10:23",
                "MMM dd hh:mm:ss", "yyyy-MM-dd a HH:mm:ss.SSS Z"));
//Actual  : 1970-03-22 AM 00:10:23.000 +0800
//Expected: 1970-03-22 PM 12:10:23.000 +0800
System.out.println(parseAndFormat("MAR 22 00:10:23",
                "MMM dd hh:mm:ss", "yyyy-MM-dd a HH:mm:ss.SSS Z")); 
//Actual:   1970-03-22 AM 00:10:23.000 +0800
//Expected: 1970-03-22 AM 00:10:23.000 +0800
private static String parseAndFormat(String input, String parse,
        String format) throws ParseException {
    DateFormat parser = new SimpleDateFormat(parse, Locale.ENGLISH);
    DateFormat formater = new SimpleDateFormat(format, Locale.ENGLISH);
    Date date = parser.parse(input);
    String result = formater.format(date);
    return result;
}
4

1 に答える 1

2

hh24 時間制の値を提供しているように見えますが、常に時間の入力形式として提供しています。HHの代わりに使用しhhます。その年の価値がないという事実は、それとは無関係です。

出力形式では、24 時間形式 ( HH) と午前/午後指定子 ( a)が混在していることに注意してください。これ奇妙です。たとえば、「1970-03-22 PM 16:10:23.000 +0800」を表示したいのはなぜですか? とても変わったフォーマットです。

SimpleDateFormatさまざまな形式指定子の意味の詳細については、ドキュメントを参照してください。

于 2013-03-28T15:22:21.303 に答える