0

ユーザーが入力した日時に基づいてタスクをスケジュールする必要があります。これらのタスクは毎週繰り返され、チェックボックスの値に基づいて、その日に有効に設定する必要があります。

たとえば、現時点では第 6 水曜日の 15:40 UTC+2 です。ユーザーが毎週水曜日の 12:00 にタスクをスケジュールしたい場合、11 月 13 日の 12:00 に時間をミリ秒単位で取得したいと考えています。タスクが毎週水曜日の 16:00 にスケジュールされるように設定されている場合、今日の時間が必要です。毎週木曜日に実行するようにスケジュールされたタスクは、明日のミリ秒表現になります。したがって、基本的には、最も近い日付が来ます。これを Java で実装するにはどうすればよいですか?

4

3 に答える 3

0

回答ありがとうございます。コンパスの答えは正しかったので、Java で次の実装を作成しました。

public static long nextDate(int day, int hour, int minute) {
    // Initialize the Calendar objects
    Calendar current = Calendar.getInstance();
    Calendar target  = Calendar.getInstance();

    // Fetch the current day of the week. 
    // Calendar class weekday indexing starts at 1 for Sunday, 2 for Monday etc. 
    // Change it to start from zero on Monday continueing to six for Sunday
    int today = target.get(Calendar.DAY_OF_WEEK) - 2;
    if(today == -1) today = 7;

    int difference = -1;
    if(today <= day) {
        // Target date is this week
        difference = day - today;
    } else {
        // Target date is passed already this week.
        // Let's get the date next week
        difference = 7 - today + day;
    }

    // Setting the target hour and minute
    target.set(Calendar.HOUR_OF_DAY, hour);
    target.set(Calendar.MINUTE, minute);
    target.set(Calendar.SECOND, 0);

    // If difference == 0 (target day is this day), let's check that the time isn't passed today. 
    // If it has, set difference = 7 to get the date next week
    if(difference == 0 && current.getTimeInMillis() > target.getTimeInMillis()) {
        difference = 7;
    }

    // Adding the days to the target Calendar object
    target.add(Calendar.DATE, difference);

    // Just for debug
    System.out.println(target.getTime());

    // Return the next suitable datetime in milliseconds
    return target.getTimeInMillis();
}
于 2013-11-06T15:19:09.177 に答える