我一直在一個項目中的日期計算基於添加到當前DateTime.Now的天數。我使用了幾項基於這項工作的功能:business dates calculation,並且由於這需要計算工作日(沒有計算週末日或節假日,節假日編碼爲應用配置文件),因此計數需要在當前日期開始「現在」,或者如果開始是在週末日或假期的前一個工作日。 當前類文件始終將提前移至開始點票前的下一個工作日。如果開始日期是今天,則計數將在明天開始。天減去一種方法來計算工作日c#
我的要求,例如:2012年1月21日的開始日是星期六。增加10天的值。結果日期應該是 2月2日。這意味着開始計算的工作日是1月20日星期五+ 9天以上= 10天。另一個例子是在1月22日星期日開始,再回到1月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;
你可以更簡潔一點,你的問題是什麼?我有一個類似的問題,但我選擇創建一個名爲'AddWorkDays(由天假日作爲整數,通過假日列表(日期時間)')這樣我可以通過節假日我想跳過功能。它看起來像你的設置,每個'XDateTime'存儲自己的假期。 – Origin
請在此處張貼一些代碼,顯示您嘗試使用的方法,這會給您帶來麻煩。 –
將按鈕點擊事件添加到原始問題中。對不起,我不確定如何在註釋中放置格式化的代碼。我需要發生的一件事情是,開始計數的日子是日期時間選擇器的日期,而不是下一個工作日。謝謝! – gary7