-3

Timestamp現在の時刻でクラスを使用して時間を設定しています。私はCalendar最初にクラスで時間を設定し、次に で時間を設定しDAY_OF_WEEKていDAY_OF_MONTHます。私は毎回同じ出力を得ています。DAY_OF_MONTHでは、との違いは何DAY_OF_WEEKですか?

    Timestamp followUpDateBegins = new Timestamp(System.currentTimeMillis());

    Calendar cal = Calendar.getInstance();
    cal.setTime(followUpDateBegins);
    cal.add(Calendar.DAY_OF_WEEK, -30);
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);

    followUpDateBegins.setTime(cal.getTime().getTime());
    System.out.println("followUpDateBegins      "+followUpDateBegins);

また

    Timestamp followUpDateBeginsSecond = new Timestamp(System.currentTimeMillis());

    cal.setTime(followUpDateBeginsSecond);
    cal.add(Calendar.DAY_OF_MONTH, -30);
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);

    followUpDateBeginsSecond.setTime(cal.getTime().getTime());
    System.out.println("followUpDateBegins" + followUpDateBeginsSecond);
4

3 に答える 3

4

DAY_OF_WEEK は曜日 (7 日)、DAY_OF_MONTH は月の日 (<=31 日) です。

于 2018-04-10T09:20:25.670 に答える
1

他の回答で説明されているように、両方のフィールドを追加すると同じ日付になります。これは奇妙な実装の詳細である IMO です。ソースコードから、追加時に両方のフィールドが「同じ」と見なされるswitchステートメントがあることがわかります。

case DAY_OF_MONTH: // synonym of DATE
case DAY_OF_YEAR:
case DAY_OF_WEEK:

Alghough it doesn't make sense "adding days of week" (IMHO - because in the end you just add days, no matter if it's in the same week, month or whatever, and that's it), that's the way it's implemented. This API is really confusing...

Another detail is that Calendar.getInstance() already returns the current date/time - it internally calls System.currentTimeMillis(), so creating a Timestamp just to set it in the calendar is redundant. You could just do:

// create the calendar
Calendar cal = Calendar.getInstance();

// do your stuff
...

// create the timestamp
Timestamp followUpDateBeginsSecond = new Timestamp(cal.getTimeInMillis());
于 2018-04-10T12:58:12.467 に答える