2010-12-19 3 views
2

金曜日と土曜日のない月の日数をC#で取得するにはどうすればよいですか?私はループまたは反復を回避し、このようにそれを行うだろう週末なしでDateTime.DaysInMonthを取得するにはどうすればよいですか?

class Program 
{ 
    static void Main(string[] args) 
    { 
     int month = DateTime.Today.Month; 
     int year = DateTime.Today.Year; 

     int daysInMonthMinusFridayAndSaturday = 0; 

     for (int i = 1; i <= DateTime.DaysInMonth(year,month); i++) 
     { 
      DateTime thisDay = new DateTime(year,month,i); 
      if(thisDay.DayOfWeek != DayOfWeek.Friday && thisDay.DayOfWeek != DayOfWeek.Saturday) 
      { 
       daysInMonthMinusFridayAndSaturday += 1; 
      } 
     } 

     Console.WriteLine(daysInMonthMinusFridayAndSaturday); 
     Console.ReadLine(); 
    } 
} 
+0

毎日繰り返すだけで、私は毎日の定期的なDaysInMonthに初期化されたカウンターから金曜日と土曜日ごとに1を削除します。 –

+2

@Camilo Martin - 「毎日繰り返す」とはどういう意味ですか? DateTime.DaysInMonthはコレクションではなくintを取得します。 – Erez

+0

[.NET Date Compare:日付以降の稼働日数を数えますか?](http://stackoverflow.com/questions/165887/net-date-compare-count-the-amount-of-working-日より遅い) – Oded

答えて

6

、さてあなたは思い

int days = Enumerable.Range(1, DateTime.DaysInMonth(year, month)) 
        .Select(day => new DateTime(year, month, day)) 
        .Count(d => d.DayOfWeek != DayOfWeek.Saturday && 
            d.DayOfWeek != DayOfWeek.Friday); 
1

int GetWorkDays(int year, int month) 
{ 
    var firstDayOfMonth = new DateTime(year, month, 1).DayOfWeek; 
    var daysInMonth = DateTime.DaysInMonth(year, month); 

    // count whole weeks first    
    var wholeWeeks = daysInMonth/7; 
    var extraDays = daysInMonth % 7; 

    // calculate the overlap of the "remainder days" with the weekend. 
    var lastDayOfMonth = (int) (firstDayOfMonth + extraDays - 1); 
    var overlapStart = Math.Max((int) firstDayOfMonth, (int) DayOfWeek.Friday); 
    var overlapEnd = Math.Min(lastDayOfMonth, (int) DayOfWeek.Saturday); 
    var weekendOverlap = Math.Max(0, overlapEnd - overlapStart + 1); 

    // substract weekend days 
    return daysInMonth - wholeWeeks * 2 - weekendOverlap; 
} 
+0

何かのパフォーマンスが少し簡単に気にするのはなぜですか?最悪の場合、数ミリ秒以上かかることはないようです。 –

+1

@Camilo Martin:それはよりいいです:)私は実際の意味がないことに同意します。少なくとも誰かが本当に長い月を発明するまで。 – Ran

6

必須LINQソリューション:迅速かつ汚い。ここ

関連する問題