2

「月」と「年」の入力を受け入れるフォームがあります。すべての「稼働週」を取得する方法について質問するためにここに書いています。

月曜日から金曜日の「​​稼働週」を意味します

したがって、基本的にはweek1からweek4、または可能であればweek5が必要です。

たとえば、2013 年 1 月を入力した場合:

week1 = January 1 to January 4
week2 = January 7 to January 11
week3 = January 14 to January 18
week4 = January 21 to January 25
week5 = January 28 to January 31

どうすればそれを達成できますか?助けてくれてありがとう!提案やアイデアは大歓迎です。ありがとう仲間!:)

4

3 に答える 3

4

次の Linq クエリを使用できます。

int month = 1;
int year = 2013;
var cal = System.Globalization.CultureInfo.CurrentCulture.Calendar;
IEnumerable<int> daysInMonth = Enumerable.Range(1, cal.GetDaysInMonth(year, month));

List<Tuple<int, DateTime, DateTime>> listOfWorkWeeks = daysInMonth
    .Select(day => new DateTime(year, month, day))
    .GroupBy(d => cal.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday))
    .Select(g => Tuple.Create(g.Key, g.First(), g.Last(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday)))
    .ToList();

// Item1 = week in year, Item2 = first day, Item3 = last working day
int weekNum = 1;
foreach (var weekGroup in listOfWorkWeeks)
{
    Console.WriteLine("Week{0} = {1} {2} to {1} {3}"
        , weekNum++
        , System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month)
        , weekGroup.Item2.Day
        , weekGroup.Item3.Day);
}

1 月の出力:

Week1 = January 1 to January 4
Week2 = January 7 to January 11
Week3 = January 14 to January 18
Week4 = January 21 to January 25
Week5 = January 28 to January 31

2 月の場合:

Week1 = February 1 to February 1
Week2 = February 4 to February 8
Week3 = February 11 to February 15
Week4 = February 18 to February 22
Week5 = February 25 to February 28
于 2013-01-17T16:51:46.333 に答える
0

月と年の最初の月曜日を検索します。

int year = 2013;
int month = 1;

DateTime testDate = new DateTime(year,month,1);


while ( testDate.DayOfWeek != DayOfWeek.Monday )
{
   testDate = testDate.AddDays(1);
}

次に、2013年ではない年に達するまで、毎週繰り返します。

// Should have first monday now.
// Loop until the month changes
while ( testDate.Month == month)
{
   var monday = testDate;
   var friday = testDate.AddDays(4);

   // You now have both dates.  Do whatever you need to.
   // here.

   // Increment test date by a week
   testDate = testDate.AddDays(7)
}
于 2013-01-17T16:25:25.897 に答える
0

擬似コード:

  1. 月の最初の日から開始

  2. While (day != Monday) take next date (+1 日)

    日が月曜日かどうかを確認するには、この SO 投稿(Jon Skeet answer!) を参照してください。

  3. 4 日を追加して、稼働週の終わりを見つけます。

    それが同じ月にある場合は、回答に 1 週​​間かかります。

  4. 次の月曜日を見つけるには 7 日を追加します

  5. 新しい月曜日がまだ同じ月内にある場合: 3. と 4. を繰り返します。

EDIT上記は、すべての完全な稼働週を検索します。

他の週も検索するには:

  • 月の最初の日がすでに営業日である場合は、次の金曜日を検索します。-> 第 1 週
  • 最終金曜日が翌月の場合は、その月の最終日に最終週が終了します。-> 先週の営業日
于 2013-01-17T16:28:58.333 に答える