2013-03-12 171 views
1

C#用於計算兩個日期之間的天數的代碼...我有一個文本框的開始日期和另一個文本框的結束日期,我不需要。兩天之間的天數,並顯示在第三個文本框中,它應該排除假期和週末(星期六和星期日)。用於計算兩個日期之間的天數的代碼

+3

相關http://stackoverflow.com/questions/1617049/calculate-the-number-of-business-days-between-two-dates – 2013-03-12 07:11:34

+0

哪裏是名單假期? – 2013-03-12 07:28:39

+0

如果一天是假期,你是否想用日曆來查找?例如在基督教的日曆_Good Friday_可能是假期,即使它不是星期六或星期天。 – 2013-03-12 07:31:53

回答

3

您可以解析文本框的日期至日期時間對象,然後嘗試以下幾行內容。

DateTime startDate = new DateTime(2013, 03, 01); 
DateTime endDate = DateTime.Today; // 12 March 2013 
int totalDays = 0; 
while (startDate <= endDate) 
{ 
    if (startDate.DayOfWeek == DayOfWeek.Saturday 
     || startDate.DayOfWeek == DayOfWeek.Sunday) 
    { 
     startDate = startDate.AddDays(1); 
     continue; 
    } 
    startDate = startDate.AddDays(1); 
    totalDays++; 
} 

Console.WriteLine("Total days excluding weekends: {0}", totalDays); 
+0

如果你想計算包括週末在內的所有日子,我不想使用它。這隻能在你不想包括週末的時候使用。 – albertjan 2013-03-12 07:25:49

+0

@albertjan,否則'TimeSpan.TotalDays'屬性足以計算兩個日期之間的差異。 – Habib 2013-03-12 07:27:18

+0

@albertjan,感謝編輯 – Habib 2013-03-12 07:29:14

2
var dateDiff = FirstDate - SecondDate; 
double totalDays = dateDiff.TotalDays; 
+0

這不會排除週末 – Habib 2013-03-12 07:22:54

1

如果您在文本框即textBox1的1和TextBox

DateTime date1= new DateTime(); 
DateTime date2 = new DateTime(); 
double days; 

bool isDate1Valid =DateTime.TryParse(textBox1.Text, out date1); 
bool isDate2Valid =DateTime.TryParse(textBox2.Text, out date2); 

if(isDate1Valid && isDate2Valid) 
days = (date1-date2).TotalDays; 

編輯

兩個日期如果您需要做的是不用循環Here is how to do it.

如果日期差異太大,循環可能會消耗一些額外的時間。

+1

「它應該排除假期和週末(星期六和星期日)。」這就是問題所在。 TotalDays不會排除 – Habib 2013-03-12 07:24:50

+0

@Habib:哦,你是對的..(急速使廢物) – Marshal 2013-03-12 07:28:09

1

試試這個..

DateTime startdate = DateTime.Parse("somedate"); 
    DateTime enddate = DateTime.Parse("somedate"); 
    int daycount = 0; 
    while (startdate < enddate) 
    { 
     startdate = startdate.AddDays(1); // Fixed 
     int DayNumInWeek = (int)startdate.DayOfWeek; 
     if (DayNumInWeek != 0) 
     { 
      if (DayNumInWeek != 6) 
      { daycount += 1; } 
     } 
    }