2013-10-10 205 views
0

我正在使用以下代碼跳過星期日和星期天以獲得特定小時數的工作日,實際上我的任務是什麼:跳過週六和週日,並從ASP.NET中的當前日期獲取日期?

我有一個項目和具體時間來完成,現在我只是想顯示日期時,項目將完成:

我的代碼是:

DateTime date = DateTime.Now; 
    Int32 d = 1; 
    Int32 result = 260/8; 
    for (d = 0; d <= result; d++) 
    { 
     if (date.DayOfWeek.ToString() == "Saturday" || date.DayOfWeek.ToString() == "Sunday") 
     { 
      d = d - 1; 
      date = date.AddDays(1); 
     } 
     else 
     { 
      date = date.AddDays(1); 
     } 
    } 
    lbldate.Text = date.ToString(); 

它的做工精細高達三十日內天是32日再過來應該是:: 2013年11月25日 但即將於2013年11月26日發佈。

請告訴我我在哪裏犯錯。

+2

在我看來,你應該檢索工作日內從數據庫(也設置holydays)。有很多例子說明如何在工作日創建一個表格。然後創建一個標量函數來獲得工作日。 –

回答

1

也許有什麼東西更優雅,但它的作品,並不需要一個循環:

public static DateTime GetDateIn(int numWorkingHours) 
{ 
    int numDays = numWorkingHours/8; 
    DateTime date = DateTime.Now; 
    // normalize to monday 
    if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) 
     date = date.AddDays(date.DayOfWeek == DayOfWeek.Sunday ? 1 : 2); 
    int weeks = numDays/5; 
    int remainder = numDays % 5; 
    date = date.AddDays(weeks * 7 + remainder); 
    // normalize to monday 
    if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) 
     date = date.AddDays(date.DayOfWeek == DayOfWeek.Sunday ? 1 : 2);  
    return date; 
} 

Demo

+0

順便說一句,在ideone'DateTime.Now'上是'10/14/2013 5:43:57 PM'。這就是「錯誤」結果的原因。 –

0

而不是從d變量減去

使用下面的代碼的情況下,這是一個假日星期六或Sun

date.Subtract(new TimeSpan(1, 0, 0, 0)); // where 1 is day count you need to subtract 
1

一個可行的解決方案將是:

DateTime endDate = DateTime.Now; 
double remainingAmountOfWorkingDays = Math.Round(260d/8d); 
while (remainingAmountOfWorkingDays > 0) 
    { 
    endDate = endDate.AddDays(1); 

    if (endDate.DayOfWeek == DayOfWeek.Saturday || endDate.DayOfWeek == DayOfWeek.Sunday) 
     continue; 

    Console.WriteLine(remainingAmountOfWorkingDays +" "+endDate.ToString("dddd dd.MM.yyyy")); 
    remainingAmountOfWorkingDays--; 
    }   
相關問題