一回のCalendarのsetとaddを覚えます。

3329 ワード

Calendar
Calendarは日付ツール類で、日付に対して操作することができます。たとえば:
Calendar c = Calendar.getInstance();
//                   ,  24   ,               
c.add(Calendar.HOUR_OF_DAY, -1);

//                       -1,                   ,-1  ,    ,          23 ,          
c.set(Calendar.HOUR_OF_DAY, -1);
上記の例:現在の時間は2018-08-=03=09==52:09で、addの後の時間は2018-08-=03==08=52:09セットの後の時間は2018-08=02=23==52:09
ソース解析
addのソースコード
switch (field) {
    // Handle the time fields here. Convert the given
    // amount to milliseconds and call setTimeInMillis.
    case HOUR:
    case HOUR_OF_DAY:
        delta *= 60 * 60 * 1000;        // hours to minutes
        break;

    case MINUTE:
        delta *= 60 * 1000;             // minutes to seconds
        break;

    case SECOND:
        delta *= 1000;                  // seconds to milliseconds
        break;

    case MILLISECOND:
        break;
セットのソースコード
internalSet(field, value);

final void internalSet(int field, int value)
{
    fields[field] = value;
}
getTimeのソースコードの一部
long timeOfDay = 0;
if (isFieldSet(fieldMask, HOUR_OF_DAY)) {
    timeOfDay += (long) internalGet(HOUR_OF_DAY);
} else {
    timeOfDay += internalGet(HOUR);
    // The default value of AM_PM is 0 which designates AM.
    if (isFieldSet(fieldMask, AM_PM)) {
        timeOfDay += 12 * internalGet(AM_PM);
    }
}
//        HOUR_OF_DAY -1,             -60,            60 ,             
timeOfDay *= 60;
以上より
希望時間の増加または減少だけであれば、必ずaddを使用し、設定時間が希望される場合はsetを使用する。