web-dev-qa-db-ja.com

日付文字列を日付に解析する方法

以下の日付文字列をDateオブジェクトに解析する方法

String target = "Thu Sep 28 20:29:30 JST 2000";
DateFormat df = new SimpleDateFormat("E MM dd kk:mm:ss z yyyy");
Date result =  df.parse(target);  

例外をスローします...

Java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000"
        at Java.text.DateFormat.parse(DateFormat.Java:337)
112
masato-san

パターンが間違っています。あなたは3文字の日の省略形を持っているので、それはEEEでなければなりません。あなたは3文字の月の略語を持っているので、それはMMMでなければなりません。これらの日と月の略語はロケールに依存するため、SimpleDateFormatロケールも英語に明示的に指定したいとします。そうしないとプラットフォーム自体のデフォルトロケールが使用され、それ自体は英語ではない可能性があります。

public static void main(String[] args) throws Exception {
    String target = "Thu Sep 28 20:29:30 JST 2000";
    DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
    Date result =  df.parse(target);  
    System.out.println(result);
}

これはここに印刷されます

木9月28日07:29:30ボット2000

これは私のタイムゾーンでは正しいです。

また、HHの代わりにkkを使用したくない場合も、再検討します。有効なパターンについての詳細は javadoc を読んでください。

170
BalusC

これが実用的な例です。

import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.text.DateFormat;
import Java.util.Date;

public class j4496359 {
    public static void main(String[] args) {
        try {
            String target = "Thu Sep 28 20:29:30 JST 2000";
            DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss zzz yyyy");
            Date result =  df.parse(target);
            System.out.println(result); 
        } catch (ParseException pe) {
            pe.printStackTrace();
        }
    }
}

印刷します。

Thu Sep 28 13:29:30 CEST 2000
13
miku
String target = "27-09-1991 20:29:30";
DateFormat df = new SimpleDateFormat("dd MM yyyy HH:mm:ss");
Date result =  df.parse(target);
System.out.println(result); 

これはうまくいきますか?

11
new SimpleDateFormat("EEE MMM dd kk:mm:ss ZZZ yyyy");

そして

new SimpleDateFormat("EEE MMM dd kk:mm:ss Z yyyy");

まだ走ります。しかし、あなたのコードが例外を投げたのなら、それはあなたのツールやjdkあるいはその他の理由によるものです。 私のIDEでも同じエラーが発生しましたが、これらをチェックしてください http://ideone.com/Y2cRr (オンラインで) ZZZ および Z

出力は次のとおりです。Thu Sep 28 11:29:30 GMT 2000

7
user467871

私はこの問題を抱えていました、そして私はLocaleUSに設定しました、そしてそれは働きます。

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

String"Sun Jul 08 00:06:30 UTC 2012"の場合

4
dennis

解析例外はチェック済み例外なので、@ mikuが示唆しているように、文字列から日付への解析を行うときはtry-catchでキャッチする必要があります。

0
nckbrz