2015-03-13 97 views
0

我只想知道如何計算日期時間而不包括週末(目前正在製作圖書館系統)。圖書館在週末不開放,這就是爲什麼我需要計算不包括週末的日期。例如, 03/13/15 =星期五,即時借用5天。所以,返回日期應該在03/20/15 =週五(因爲我沒有包括週末) 請問我可以給我一些想法嗎?謝謝!不包括日期時間的週末

編輯:(當我鍵入數字節目突然凍結)

int days = 0; 
DateTime deyt = DateTime.Now; 
rd.Text = deyt.ToString("MM/dd/yy"); 
DateTime dt = deyt.AddDays(int.Parse(textBox3.Text)); 


DateTime span = deyt; 
while (span < dt.AddDays(1)) 
{ 
    if (span.DayOfWeek != DayOfWeek.Saturday && span.DayOfWeek != DayOfWeek.Sunday) 
    { 
     days++; 
     span = span.AddDays(1); 
     bd.Text = days.ToString("MM/dd/yy"); 
    } 
} 
+1

你正在嘗試的某些代碼將有所幫助。 – 2015-03-13 07:19:27

+4

「不包括週末」是什麼意思?你想要執行什麼計算? Access在哪裏進來?您的問題對我們來說目前太模糊了,無法幫助您。 (我懷疑實際上你想排除公共假期和事情......) – 2015-03-13 07:19:29

+0

如果像@JonSkeet所說的那樣,除了週末日子之外,你還需要考慮法定(公共)假期,那麼你很可能需要使用日期表。這種方法的一個簡單例子是我的另一個答案[這裏](http://stackoverflow.com/a/27249036/2144390)。 – 2015-03-13 10:34:12

回答

1
DateTime date = DateTime.Now // Set your Date 

if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday) 
{ 
//TODO 
} 
+0

使用枚舉值名稱而不是轉換爲int會更清晰。它根本不*顯而易見*什麼值6代表,例如... – 2015-03-13 07:26:15

+0

是的,我同意你 – Nalaka 2015-03-13 07:41:37

+0

所以現在將是一個很好的時間來編輯你的答案:) – 2015-03-13 08:09:23

4

如果你有DateTime是否列表,你可以過濾掉週末日期:

public static List<DateTime> GetDatesWithoutWeekends(List<DateTime> dates) 
{ 
    return 
     dates.Where(date => (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)) 
       .ToList(); 
} 
+0

我現在有我的代碼。在我的文章中看到它作爲編輯。謝謝。 – Dannehkown 2015-03-13 10:38:36

1

有在大量的日子裏這樣做是非常有效的方法,但是如果你的代碼只處理小值,你可以使用:

static DateTime AddDaysExcludingWeekends(DateTime start, int days) 
{ 
    // Do you need this? 
    if (days < 0) 
    { 
     throw new ArgumentException("Not implemented yet..."); 
    } 
    DateTime current = start; 
    for (int i = 0; i < days; days++) 
    { 
     current = current.AddDays(1); 
     if (current.DayOfWeek == DayOfWeek.Sunday || 
      current.DayOfWeek == DayOfWeek.Saturday) 
     { 
      // Effectively force "go round again" behaviour. 
      i--; 
     } 
    } 
    return current; 
} 

或替代方法:

static DateTime AddDaysExcludingWeekends(DateTime start, int days) 
{ 
    // Do you need this? 
    if (days < 0) 
    { 
     throw new ArgumentException("Not implemented yet..."); 
    } 
    DateTime current = start; 
    for (int i = 0; i < days; days++) 
    { 
     // Loop at least once, and keep going until we're on 
     // a weekday. 
     do 
     { 
      current = current.AddDays(1); 
     } 
     while (current.DayOfWeek == DayOfWeek.Sunday || 
       current.DayOfWeek == DayOfWeek.Saturday); 
    } 
    return current; 
} 

需要注意的是,如果你在天= 0,將返回即使是在週末的原始日期通過。目前還不清楚你是否想要這種行爲,或者是否應該跳到星期一。

0
This is your code... Try.. 

     int days = 0; 
     DateTime deyt = DateTime.Now; 
     DateTime dt = deyt.AddDays(int.Parse(textBox3.Text)); 

     DateTime span = deyt; 
     while (span <= dt) 
     { 
      if (span.DayOfWeek != DayOfWeek.Saturday && span.DayOfWeek != DayOfWeek.Sunday) 
      { 
       days++; 
       bd.Text = days.ToString(); 
       Console.WriteLine(span.ToString("MM/dd/yy")); 
      } 
      span = span.AddDays(1); 
     } 
相關問題