1


1

なぜJava SimpleDateFormat()。parse()が奇妙な形式を出力するのですか?

私の入力は、次の形式の文字列です。

3/4/2010 10:40:01 AM
3/4/2010 10:38:31 AM

私のコードは:

DateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss aa");
            try
            {
                Date today = dateFormat.parse(time);
                System.out.println("Date Time : " + today);

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

出力は以下のとおりです。

Sun Jan 03 10:38:31 AST 2010
Sun Jan 03 10:40:01 AST 2010

日(日)がどこから来たのかわかりませんか? または(AST)? なぜ日付が間違っているのですか? 元の* String 日付と同じ形式を保持し、それを Date *オブジェクトにしたかっただけです。

Netbeans 6.8 Macバージョンを使用しています。

5 Answer


7


mmではなくMMである必要があります。 小文字のmmは、月ではなく分を表します。

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss aa");


4


MM月ではなく、MM。 「mm」を2回使用しています-論理的には同じことです-分。


3


日付を元の形式で印刷する場合は、formatメソッドを使用します。

System.out.println("Date Time : "+ dateFormat.format(today));

「奇妙な」フォーマットは、DateのtoString実装に由来し、javadocは次のように述べています。
このDateオブジェクトを次の形式の文字列に変換します。

ダウモンdd hh:mm:ss zzz yyyy

"I just wanted to keep the same format of the original String date and make it into a Date object."

Dateオブジェクトは特定の瞬間を表すことを目的としているため、元の文字列の形式を保持することはできません。そのため、DateFormatクラスがあります。


2


答えは簡単です。 意図したdateFormatバージョンではなく、今日のDate.toString()値を表示しました。 必要なものは:

System.out.println("Date Time : " + dateFormat.format(today) );


1


System.out.println()を使用して日付を出力すると、http://java.sun.com/javase/6/docs/api/java/util/Date.html#toString%28%29 [toString()になります。 ] Dateオブジェクトで呼び出されるメソッド。

toString()で使用されるフォーマット文字列は、出力に曜日とタイムゾーンを表示させるものです。

これは、Duffyが指摘した解析ミスとは別です。