2011-07-28 51 views
2

在Visual Studio中使用C#進行操作。我正在爲一個小型辦公室製作一個軟件,以捕捉訴訟。一旦訴訟被抓獲,該辦公室有15天時間向法庭發送一些文件。所以deadline是在15天內。需要將日期添加到日期,但排除日曆中的某些日期

但是,如果有例如,並更新(update1)的訴訟,辦公室現在有一個新的deadline發送update1文件。

因此,截止日期爲Capture是DD/MM/YYY 然後,截止日期爲UPDATE1是DD/MM/YYYY

但我需要排除所有非勞動天,這樣的期限不顯示任何非勞動天。例如:

捕獲:15天 UPDATE1:5天 UPDATE2:10天 UPDATE3:7天

所以,如果我今天拍攝,2011年7月28日,15天應該被添加到截止日期變量,這將是8月12日,但我必須從日曆中排除非勞動日。例如2011年8月12日。

我已經將DatePicker值轉換爲字符串,格式爲(dd/MM/yyyy),並且我將它與非有效日期的字符串列表進行比較,格式爲DD/MM /年)。

如果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; 
} 

我遇到的問題是,它不加入天到dealine如果期限相匹配的非有效的天。

我在做什麼不是以任何方式工作。

請有誰能夠賜教。 (=

+0

你也希望它跳過勞動天之內,如果15天的出現? (不只是如果從開始15天的日期是一個勞動節) –

回答

0

如果你想在一段時間內(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

我不明白的代碼非常好。但是,我可以想辦法使用它。問題是。我怎麼會在我的代碼實現這一點? 是的,我確實需要在這段時間內跳過個勞動日。(= – Yushell

+0

你會某處添加此方法,然後調用它,傳遞你的起始日期,天數,那麼所有你的勞動天,無論是作爲一個數組,或則params的列表,請參閱這裏:http://msdn.microsoft.com/en-us/library/w5zay9db(v=vs.100).aspx –

4

您需要更改以下...

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

到...

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

「的方法AddDays不會更改日期時間的價值。相反,它返回一個新的DateTime,其值是AddDays操作的結果。「

有關從某個日期添加工作日的功能的詳細信息,請參閱以下內容...

C#: Adding working days from a cetain date

+0

這幫助了很多。謝謝。但我仍然有問題。正如喬治達克特所說的那樣。我希望在15天內包括非工作日。這有助於與AddDays問題呢(= – Yushell

+0

沒有概率,我已經更新了更多的一些信息,可以幫助您答案。 – edge2

0

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

沒有取得任何成就。 DateTime是不可變的。該行所做的就是創建一個新的DateTime和一個從未引用的新String。我想你的意思是:

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

然而,這似乎有些奇怪,你正在使用String做得相當不僅僅是DateTime秒。