Я работал над проектом, в котором дата рассчитывается на основе количества дней, добавленных к текущему DateTime.Now.Я использую несколько функций, основанных на этой работе: расчет рабочих дат , и так как для этого требуется вычисление рабочих дней (выходные дни или выходные дни не рассчитываются, выходные дни кодируются в конфигурационном файле приложения),отсчет должен начинаться с текущей даты «сейчас» или предыдущего рабочего дня, если начало - выходной или праздничный день.Файл класса current всегда перемещается на вперед на следующий рабочий день до начала подсчета.Если дата начала сегодня, подсчет начнется завтра.
Мои требования, например: день начала 21.01.2012 - суббота.Значение 10 дней добавляется.Итоговая дата должна быть 2 февраля. Это означает, что рабочим днем для начала расчета является пятница, 20 января + еще 9 дней = 10 дней.Другим примером может быть установка начала в воскресенье 22 января, возвращение к 20 января и добавление 9 дней с тем же результатом.При условии, что подсчет не начинается в выходные или праздничные дни, он должен пропустить их и прийти к следующему расчетному рабочему дню.
У меня проблема в том, что мой проект должен рассчитываться на основе текущей даты или шаганазад к предыдущему рабочему дню, если начало подсчета - выходные или праздничные дни.
Я думаю, что файл класса очень ясен, но я не могу найти способ заставить подсчет начаться в текущий рабочий деньили вернитесь к предыдущему рабочему дню, если счет начинается в выходные или праздничные дни.
Пожалуйста, посмотрите на код в ссылке.Я пытался добавить отрицательные значения к параметру addDays в нескольких существующих методах;в своей форме я попытался заставить значение dateTimePicker вычесть день и множество других побоев по всему файлу класса, что привело к сбою.
Любой совет или помощь будет принята с благодарностью!
Код события нажатия кнопки:
//DateTime.Today.AddDays(-4);
DateTime date = dateTimePicker1.Value;
// dateTimePicker1.Value.AddDays(-2);
XDateTime sDate = new XDateTime(dateTimePicker1.Value.ToShortDateString(), XDateTimeType.Business);
string Str = textBox2.Text.Trim();
string Str2 = textBox3.Text.Trim();
double Num;
bool isNum = double.TryParse(Str, out Num);
bool isNum2 = double.TryParse(Str2, out Num);
label6.Text = "";
//Test whether textBox contains a number or some other character. Fails if not a number.
if (isNum)
{
short days = Convert.ToInt16(textBox2.Text);
sDate.AddBusinessDays(days);
lblTodaysDate.Text = " Substantial Completion Date: " + sDate.Date.ToString("MMMM d, yyyy");
label3.Text = "";
if (isNum2)
{
short days2 = Convert.ToInt16(textBox3.Text);
sDate.AddBusinessDays(days2);
label6.Text = " Physical Completion Date: " + sDate.Date.ToString("MMMM d, yyyy");
label5.Text = "";
}
else
label5.Text = "Please enter numbers only!";
return;
}
else
label3.Text = "Please enter numbers only!";
return;