Необходимо добавить дни к дате, но исключить определенные дни из календаря - PullRequest
2 голосов
/ 28 июля 2011

Работа в Visual Studio с C #.Я делаю программное обеспечение для небольшого офиса, в котором регистрируются судебные процессы.После того, как судебный процесс захвачен, у офиса есть 15 дней, чтобы отправить некоторые документы в трибунал.Таким образом, DeadLine через 15 дней.

Но если есть, например, и обновление (update1) к иску, у офиса теперь есть новая deadLine для отправки документов update1.

Итак, deadLineдля Capture dd / MM / yyy Тогда deadLine для update1 равен dd / MM / yyyy

Но мне нужно исключить все нерабочие дни, чтобы в deadLines не отображались нерабочие дни.Пример:

Захват: 15 дней Обновление 1: 5 дней Обновление 2: 10 дней Обновление 3: 7 дней

Итак, если я сделаю снимок сегодня, 28 июля 2011 года, к переменной deadLine необходимо добавить 15 дней.Это будет 12 августа, но я должен исключить нерабочие дни из календаря.Например, 12 августа 2011 года.

Я превратил значение DatePicker в строку с форматом (дд / мм / гггг) и сравниваю его со списком строк недопустимых дней сформат (дд / мм / гггг).

И если deadLine выпадает на один из этих дней, я конвертирую deadLine в dateTime, добавляю 1 день, пока он не выпадает на один из этих дней.Затем сохраните окончательное значение dateTime как новую deadLine.

Пример:

string DeadLine;
string NonValidDay001 = 12/08/2011;
string NonValidDay001 = 15/08/2011;
string NonValidDay001 = 19/08/2011;

DeadLine = DatePicker01.Value.AddDays(15).ToString("dd/MM/yyyy");

while (DeadLine == NonValidDay001 | DeadLine == NonValidDay001 | DeadLine == NonValidDay001)
{
    dateTime dt = Convert.toDateTime(DeadLine);
    dt.AddDays(1).ToString("dd/MM/yyyy");
    DeadLine = dt;
}

Проблема, с которой я столкнулся, заключается в том, что я не добавляю дни к соглашению, если крайний срок совпадает с недействительнымдней.

То, что я делаю, никак не работает.

Может ли кто-нибудь просветить меня, пожалуйста.(=

Ответы [ 3 ]

4 голосов
/ 28 июля 2011

Вам необходимо изменить следующее ...

dt.AddDays(1).ToString("dd/MM/yyyy");
DeadLine = dt;

до ...

DeadLine = dt.AddDays(1).ToString("dd/MM/yyyy");

"Метод AddDays не изменяет значение DateTime. Вместо этого он возвращает новый DateTime, значение которого является результатом операции AddDays."

Для получения дополнительной информации о функции добавления рабочих дней с определенной даты см. Следующее ...

C #: добавление рабочих дней с определенной даты

0 голосов
/ 28 июля 2011

Если вы хотите пропустить трудовые дни в течение периода времени (то есть в течение 15 дней), вы можете использовать следующее (непроверенное, набранное прямо здесь):

public DateTime AddDaysExcluding(DateTime startDate, int days, params DateTime[] excludedDays)
{
    while(days != 0)
    {
        if (excludedDays.Contains(startDate))
            startDate = startDate.AddDays(1);

        startDate = startDate.AddDays(1);
        days--;
    }

    if (excludedDays.Contains(startDate))
        startDate = startDate.AddDays(1);
}

Пример использования:

DateTime deadline = AddDaysExcluding(DatePicker01.Value, 15,
    new DateTime(2011, 8, 12), new DateTime(2011, 8, 15), new DateTime(2011, 8, 19));
0 голосов
/ 28 июля 2011

Линия

dt.AddDays(1).ToString("dd/MM/yyyy");

ничего не дает.DateTime s неизменны.Все, что делает эта строка, это создает новый DateTime и новый String, на которые никогда не ссылаются.Я думаю, что вы имеете в виду:

DeadLine = dt.AddDays(1).ToString("dd/MM/yyyy");

Однако немного странно, что вы используете String с, а не просто DateTime с.

...