1

私はこの形式の Date を持っています 2009-09-17T00:00:00.000-35:00 。アプリケーションのビジネス ルールに従って、この日付を受け入れ、日付を MM/yyyy 、 yyyyMM 、および dd で返す 3 つのメソッドを作成しました。

たとえば、MM/yyyy の下に 1 つの方法が示されています。

private String getMonthYear(String date) throws Exception {
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
        String s1 = date;
        String s2 = null;
        Date d;
        try {
            d = sdf.parse(s1);
            s2 = (new SimpleDateFormat("MM/yyyy")).format(d);

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

同様に、yyyyMM および dd 形式でデータを返す他の 2 つのメソッドがありますか??

これは正常に動作しますが、見栄えがよくありません

私の質問は、私の要件を満たすユーティリティを 1 つだけ持つことはできますか??

4

5 に答える 5

3

私の質問は、私の要件を満たすユーティリティを 1 つだけ持つことはできますか??

私はあなたがこれについて間違った方法で始めていると思います。基本的に、データはただの日付です。必要に応じて、後でフォーマットを適用できます。Joda Timeの使用を開始し、メソッドが を返すようにすることをお勧めしますLocalDate。これにより、すべての実際の情報が取得DateTimeFormatterされ、必要に応じて値をフォーマットするために 3 つの個別のオブジェクトを使用できます。

可能な限り、実際の情報を最も自然に表す型を使用してデータを表現してください。データをできるだけ早くその自然な形式に変換し、別のもの (文字列など) に変換する必要があるまでその形式を維持します。

于 2012-05-28T14:57:07.390 に答える
2

単一のメソッドを定義し、予期される日付形式の文字列をパラメーターとして受け取ることができます。形式を持つ 3 つの文字列は定数として定義できます。

于 2012-05-28T14:56:50.620 に答える
0

3 つのメソッドを持つ Date クラスを作成できます。以下のように:

public class MyDate {

    private String date = null;

    public MyDate(String date) { 
        this.date = date;
    }

    public String getMonthYear() {
        return null;
    }

    public String getYearMonth() {
        return null;
    }

    public String getDay() {
        return null;
    }
}

コンストラクターで文字列を 3 つの異なる文字列にフォーマットし、メソッド呼び出しでそれらの文字列を返すことができます。同じ日付文字列で多数の/繰り返し呼び出しを行う場合、その実装は適切です。または、一度実行する場合はメソッド呼び出しで文字列をフォーマットできますが、一度実行する場合は、クラス/メソッドを静的にしてコンストラクターを削除することができます。

于 2012-05-28T15:03:22.537 に答える
0

はい、3 つのメソッドをまとめてグループ化し、追加の引数 (列挙型など) を使用して、必要な出力形式の種類を指定できます。しかし、私はそうしません。あなたのソリューションはよりクリーンです。よく見えないのはなぜだと思いますか?

ただし、私が行うことは、文字列を日付に一度だけ変換し、文字列ではなくどこでも日付を使用し、3 つのメソッドのいずれかで日付を変換することです (これは、文字列) 必要に応じて。

于 2012-05-28T14:58:58.287 に答える
0

Apache Commons Langライブラリには、これを行うためのユーティリティ メソッドが既に用意されています。例えば:

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
///
// first, convert the string to a date object
Date parsedDate = DateUtils.parseDate("2012-05-25T16:10:30.000", 
                                      new String[] {"yyyy-MM-dd'T'HH:mm:ss.SSS"});

// now, format the date object to a string, using different formats
String formattedDate = DateFormatUtils.format(parsedDate, "MM/yyyy");
String formattedDate2 = DateFormatUtils.format(parsedDate, "yyyyMM");

詳細については、DateFormatUtilsDateUtilsをご覧ください。

于 2012-05-28T15:17:10.580 に答える