2012-04-08 10 views
4

StringをDateに変換しようとしています。ここで SimpleDateFormat - 解析できない日付

は私のコードです:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 
    Date date = format.parse("Sun Apr 08 16:37:00 CEST 2012"); 

私は例外を取得:

4月8日13:51:36.536:をSystem.err/W(8005):java.text.ParseException: 未解読の日付: "Sun Apr 08 16:37:00 CEST 2012"

フォーマットは問題ありません。何か不足していますか?

ありがとうございました。

+1

はい。 2番目の 'd' –

+0

ありがとうございますが、同じ例外がスローされます。 – Domiik

+0

いいえ、そうではありません。変更後にコードを再コンパイルしてみてください。 (奇妙なロケールの問題が起こっていない限り) –

答えて

-1

"Sun"が認識されないようです。 試してみてください:

date = format.parse("Sunday Apr 08 16:37:00 CEST 2012"); 

私のために働いてください。

+1

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.htmlによれば、略語(Sun)かフルワード(Sunday)かどうかは関係ありません。 – Rob

7

投稿したコードが実際のコードでないか、ロケールに問題があります。 Sun 米国Javaロケールで動作します。

にコードを変更し

:特定Localeある

SimpleDateFormat format = 
    new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); 
+2

+1 Sunに言及する必要はありましたか? ;) –

+1

Heh - 編集ノートを参照してください。私は実際に戻ってそれを変更しなければならなかった...私は "Oracle Java" –

5

SimpleDateFormat。少なくともパターンEM例えば、「日」または「日曜日は」あなたは良く使用されるLocale

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); 

または使用を指定Locale.GERMANかLocale.FRENCHなどのために一致しないため、特定のロケールですこれはロケール固有ではありません。

2

他の回答は、2012年に罰金の答えだった。ここ最近の(2014)は、Javaの日付と時間のクラスで行う方法の例です:

System.out.println("date de la requete est " + dateq); 
    DateTimeFormatter dtf = DateTimeFormatter 
      .ofPattern("EEE MMM dd HH:mm:ss xx uuuu", Locale.ROOT); 
    OffsetDateTime dateTime1 = OffsetDateTime.parse(dateq, dtf); 

    System.out.println("new date " + dateTime1); 

のコード例は、重複した質問(などからインスピレーションを得ました私はそれを参照してください)、How to convert Xml String date to int in java

date de la requete est Tue Feb 08 12:30:27 +0000 2011 
new date 2011-02-08T12:30:27Z 

Q:(?)私はAndroid上で新しいクラスを使用することはできません

A:それは印刷し、その質問の例の文字列ではい、できます。 Androidの場合は、特にAndroidに合わせたバックポートThreeTenABPを使用します。それ以外の場合は、Java 6および7ではThreeTen Backportを使用します。

Q:日時文字列のコードがで動作しません。質問!

A:(1)可能であれば、CESTのような3文字と4文字のタイムゾーンの略語を避けてください。多くはあいまいであり、解釈はJVMの現在のタイムゾーン設定によって異なる場合もあります。 CESTはフルタイムゾーンではなく、ちょうど夏の半分のタイムゾーンです。 (2)CESTなどの文字列を取得できない場合は、OffsetDateTimeの代わりにZonedDateTimeを使用し、質問のようにフォーマットパターンにzzzを使用してください。これはこの例で動作し、2012-04-08T16:37+02:00[Europe/Paris]を生成します。

Q:新しいクラスを使用するにはどうすればよいですか?

A:開始するには、良い場所はOracle Tutorialです。

質問:Locale.ROOT ??

A:日時文字列が世界の特定の場所とその場所の言語に由来する場合は、対応するロケールを使用します。どこのコンピュータシステムでも英語を出力する傾向があるため、ちょうど英語の場合は、「ここではロケール固有のことはしない」というように、「ロケールニュートラルロケール」にはLocale.ROOTを使用することをお勧めします。

関連する問題