8

文字列を取得して特定の日付形式に変更するメソッドがありますが、日付は任意の形式になりますたとえば

16 July 2012

March 20 2012

2012 March 20

したがって、文字列がどのファイル形式であるかを検出する必要があります。

以下のコードを使用してテストしますが、ファイル形式が変更されると例外が発生します。

private String getUpdatedDate(String updated) {
        Date date;
        String formatedDate = null;
        try {
            date = new SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH)
                    .parse(updated);
            formatedDate = getDateFormat().format(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return formatedDate;
    }
4

9 に答える 9

6

おそらく最も簡単な解決策は、合理的に期待できる日付形式のコレクションを作成し、それぞれに対して入力を順番に試すことです。

あいまいな入力にフラグを付けることができます。たとえば、2012/5/6 は 6 月 5 日または 5 月 6 日ですか?

于 2012-07-03T11:37:53.163 に答える
5

BalusCは、DateUtil多くの場合に役立つシンプルなものを作成しました。要件を満たすために、これを拡張する必要がある場合があります。

リンクは次のとおりです:https ://balusc.omnifaces.org/2007/09/dateutil.html

そしてあなたが探す必要がある方法determineDateFormat()

于 2012-07-03T11:43:36.810 に答える
3

Joda Time (すばらしいライブラリ)を使用している場合は、これを非常に簡単に行うことができます。

DateTimeParser[] dateParsers = { 
        DateTimeFormat.forPattern("yyyy-MM-dd HH").getParser(),
        DateTimeFormat.forPattern("yyyy-MM-dd").getParser() };
DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, dateParsers).toFormatter();

DateTime date1 = formatter.parseDateTime("2012-07-03");
DateTime date2 = formatter.parseDateTime("2012-07-03 01");
于 2012-07-03T13:55:49.743 に答える
2

Apache commons には、この問題を解決するユーティリティ メソッドがあります。org.apache.commons.lang.time.DateUtilsクラスにはメソッド parseDateStrictly があります

   public static Date parseDateStrictly(String str,
                                         String[] parsePatterns)
                                  throws ParseException

 Parameters:
        str - the date to parse, not null
        parsePatterns - the date format patterns to use, see SimpleDateFormat, not null

さまざまなパーサーを試して、日付を表す文字列を解析します。

解析では、各解析パターンが順番に試行されます。入力文字列全体を解析した場合にのみ、解析が成功したと見なされます。一致する解析パターンがない場合は、ParseException がスローされます。

パーサーは厳密に解析します。「1996 年 2 月 942 日」などの日付は許可されません。

于 2015-07-16T15:40:50.797 に答える
0

予想される形式を決定し、各形式で日付を次々に解析してみてください。いずれかの形式が例外なく日付を解析するとすぐに停止します。

于 2012-07-03T11:38:09.567 に答える