3

特定のカスタム形式で日付を解析しようとしています。

2012 年 1 月 25 日水曜日 - 午後 12:44:07

このような..

私はこれのために作成しSimpleDateFormatました..

SimpleDateFormat sdf = new SimpleDateFormat("EEEE DD MMM YYYY - HH:MM:SS aa" );

問題は、日数のリテラルです。25日、23日、02日のように来ています。このことについて例外が発生しています...

この問題を克服する方法を助けます。

4

4 に答える 4

3

このような正規表現を使用して、その日のリテラルを削除できます。

String dateString = "WEDNESDAY 25th JAN 2012 - 12:44:07 PM";
SimpleDateFormat format = new SimpleDateFormat("EEEEEEE dd MMM yyyy - HH:mm:ss aa", new Locale("EN"));
dateString = dateString.replaceAll("(.*[0-9]{1,2})(st|nd|rd|th)(.*)", "$1$3");
Date parsedDate = format.parse(dateString);

System.out.println(parsedDate);

(ロケールは無視してください。私はどこか別の出身です:))

于 2012-02-01T19:53:34.813 に答える
2

次の方法で、解析しようとしている日付文字列を部分に分割し、問題のある 2 文字を削除できます。

String text = "WEDNESDAY 21st JAN 2012 - 12:44:07 PM";
String[] parts = text.split(" ", 3);  // we only need 3 parts. No need splitting more
parts[1] = parts[1].substring(0, 2);
String parseableText = String.format("%s %s %s", parts[0], parts[1], parts[2]);  
SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMM yyyy - hh:mm:ss aa" );

try {
    java.util.Date dt = sdf.parse(parseableText);
} catch (ParseException e) {
    e.printStackTrace();
}

解析文字列にもいくつかのエラーがありました。日付と時刻のパターンでは大文字と小文字が重要です。リファレンスについては、SimpleDateFormat javadocを参照してください。

于 2012-02-01T19:26:50.793 に答える
1

どういうわけか手動でやらなければならないでしょう。

例:次のような方法:

public static String makeItParseable(String dateStr) {
    if(dateStr.contains("st ")) {
        return dateStr.replace("st ", " ");
    } else if(dateStr.contains("nd ")) {
        return dateStr.replace("nd ", " ");
    } else if(dateStr.contains("rd ")) {
        return dateStr.replace("rd ", " ");
    } else {
        return dateStr.replace("th ", " ");
    }
}

そしてそれを使用して、入力文字列を解析可能にします。

String dateStr = "WEDNESDAY 1st JAN 2012 - 12:44:07 PM";
dateStr = makeItParseable(dateStr);
DateFormat dateFormat = new SimpleDateFormat("EEEE dd MMM yyyy - hh:mm:ss a");
Date date = dateFormat.parse(dateStr);
于 2012-02-01T19:42:07.370 に答える
0

このスレッドで人々が述べたことに従って、フォーマット文字列に「.th」を追加します

Javaで「11日」、「21日」、または「23日」と言うように月の日をどのようにフォーマットしますか? (順序標識)

于 2012-02-01T19:03:00.537 に答える