Найти все субботу и воскресенье из указанного диапазона дат - PullRequest
0 голосов
/ 11 октября 2011

Я хочу взять всю субботу и воскресенье из заданного диапазона дат ...

мои данные

Дата начала: 01.01.2011 Дата окончания: 01.01.2012

теперь ищите дату, которая находится между заданной датой начала и датой окончания, и днем ​​будет суббота или воскресенье.

Please Suggest ...

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Во-первых, я бы порекомендовал использовать Joda Time , если возможно.Это намного лучший API даты и времени, чем встроенный в Java.

Во-вторых, если вы действительно не беспокоитесь об эффективности, я бы лично выбрал невероятно простой, но в некоторой степени- бесполезный подход простой итерации по каждому дню в период времени, включая те, которые попадают в нужные дни.Чередование между добавлением одного дня и добавлением шести дней, безусловно, будет более эффективным, но сложнее изменить.

Пример кода:

import java.util.*;
import org.joda.time.*;

public class Test
{
    public static void main(String[] args)
    {
        List<LocalDate> dates = getWeekendDates
            (new LocalDate(2011, 1, 1), new LocalDate(2011, 12, 1));
        for (LocalDate date : dates)
        {
            System.out.println(date);
        }
    }

    private static List<LocalDate> getWeekendDates
        (LocalDate start, LocalDate end)
    {
        List<LocalDate> result = new ArrayList<LocalDate>();
        for (LocalDate date = start;
             date.isBefore(end);
             date = date.plusDays(1))
        {
            int day = date.getDayOfWeek();
            // These could be passed in...
            if (day == DateTimeConstants.SATURDAY ||
                day == DateTimeConstants.SUNDAY)
            {
                result.add(date);
            }
        }
        return result;
    }                                            
}
0 голосов
/ 11 октября 2011

Я думаю, вы можете использовать следующий способ - это действительно просто, и вам не нужно использовать другие библиотеки.

Возьмите номер дня недели (для понедельника = 1, для воскресенья = 7). Затем - выберите новую дату начала, то есть первое воскресенье -> это startDate + (7 - weekdayNum). По тому же алгоритму вы можете взять последнее воскресенье из интервала (вычтя EndDate - weekdayNum - 1, я думаю). И теперь вы можете выполнить цикл по всем событиям (используйте пошаговый шаг 7). Или, если вы хотите конкретный случай, например, 3-е воскресенье, вы можете просто сделать newStartDate + 3 * 7.

Надеюсь, это понятно. Я не уверен, правильные ли цифры. Надеюсь, это поможет понять проблему.

0 голосов
/ 11 октября 2011

Я рекомендую взглянуть на эту RFC-2445 библиотеку Java с открытым исходным кодом.Вы можете создать правило еженедельного повторения с повторением в Сб и Вс, затем выполнить итерацию в течение указанного периода, чтобы получить все даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...