-2

私は次のコードを試しています、

    Calendar signupDate = Calendar.getInstance();
    signupDate.set(Calendar.YEAR, 2014);
    signupDate.set(Calendar.MONTH, 01);
    signupDate.set(Calendar.DAY_OF_MONTH, 01);
    Date signupDateTime = signupDate.getTime();

    new Object[]{signupDateTime};
    Date date = (Date) params[0];
    String format = (String) params[1];
    try {
        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.ENGLISH);
        String expDateStr = (String) sdf.format(date);
        System.out.println("Expiration Date: "+expDateStr);
    } catch (Throwable t) {
        throw new RuntimeException("Could not execute DateToString function for Date:" + params[0] + " with Pattern:" + params[1], t);
    }

このプログラムは次を出力します: 有効期限: 2014-02-32

デバッグ中に、Java API の java.text.DateFormat クラスに次の関数に到達しました。

 public final String format(Date date)
 {
     return format(date, new StringBuffer(),
                  DontCareFieldPosition.INSTANCE).toString();
 }

format 関数の日付パラメーターのランタイム値は、Fri Feb 01 17:58:30 PST 2013 です。

しかし、この関数は次を返します: 2014-02-32

フォーマットが 01 を 32 に変換する方法がわかりません。

なにか提案を?

ありがとう、

ビジェイ・ボア

4

2 に答える 2

7

2 月 1 日はその年の 32 日目です。あなたSimpleDateFormatはおそらくDDの代わりに使用していddます。

于 2013-10-01T01:03:01.917 に答える
1

これは危険です:

signupDate.set(Calendar.MONTH, 01);

このようなマジック ナンバーは使用しないでください。あなたやこのコードを保守する次のコーダーは、月が 0 ベースであること、月が 1 月ではなく 2 月に設定されることを知らない可能性があります。

より良い:

signupDate.set(Calendar.MONTH, Calendar.JANUARY);

また

signupDate.set(Calendar.MONTH, Calendar.FEBRUARY);

どちらが望まれても。

于 2013-10-01T01:04:48.007 に答える