0

C# で日付を渡して、月の平日の数を見つけようとしています。

例: 「2013 年 3 月 6 日 (2013 年 3 月 6 日)」を渡すと、関数はその月の第 1 水曜日を示す必要があります。「2013 年 3 月 1 日 (2013 年 3 月 1 日)」を渡すと、関数はその月の第 1 金曜日と言うはずです。「2013 年 3 月 13 日 (2013 年 3 月 13 日)」を渡すと、関数はその月の第 2 水曜日を示す必要があります。

私はこの関数を使用しようとしていましたが、その月の週を返します (つまり、「2013 年 3 月 6 日 (2013 年 3 月 6 日)」を渡すと 2 が返されます):

public static int GetWeekOfMonth(DateTime date)
        {
            DateTime beginningOfMonth = new DateTime(date.Year, date.Month, 1);

            while (date.Date.AddDays(1).DayOfWeek != CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)
                date = date.AddDays(1);

            return (int)Math.Truncate((double)date.Subtract(beginningOfMonth).TotalDays / 7f) + 1;
        }

月の平日の数を取得する方法について提案してください。

4

3 に答える 3

1

ここに私がすぐにまとめたものがあります:

public static int GetWeekOfMonth(DateTime dateTime)
{
    DayOfWeek dayOfWeek = dateTime.DayOfWeek;
    DateTime dayStep = new DateTime(dateTime.Year, dateTime.Month, 1);
    int returnValue = 0;

    while (dayStep <= dateTime)
    {
        if (dayStep.DayOfWeek == dayOfWeek)
        {
            returnValue++;
        }

        dayStep = dayStep.AddDays(1);
    }

    return returnValue;
}

これは同じメソッドですが、単純な INT の代わりに、"1st"、"2nd"、"3rd" などの文字列を返します。序数コードは、この投稿の samjudson のコードに基づいています: Is there an easy way to create ordinals in C#?

public static string GetWeekOfMonth(DateTime dateTime)
{
    DayOfWeek dayOfWeek = dateTime.DayOfWeek;
    DateTime dayStep = new DateTime(dateTime.Year, dateTime.Month, 1);
    int returnValue = 0;

    while (dayStep <= dateTime)
    {
        if (dayStep.DayOfWeek == dayOfWeek)
        {
            returnValue++;
        }

        dayStep = dayStep.AddDays(1);
    }

    switch (returnValue % 100)
    {
        case 11:
        case 12:
        case 13:
            return returnValue.ToString() + "th";
    }

    switch (returnValue % 10)
    {
        case 1:
            return returnValue.ToString() + "st";
        case 2:
            return returnValue.ToString() + "nd";
        case 3:
            return returnValue.ToString() + "rd";
        default:
            return returnValue.ToString() + "th";
    }
}

そして最後に、これは「月の第 2 水曜日」を返します。

DateTime dt = DateTime.Parse("2013-03-13");
string dateString = string.Format("{0} {1} of month", GetWeekOfMonth(dt), dt.ToString("dddd"));
于 2013-03-01T05:50:38.537 に答える
1

それは本当に簡単だと思います。その月の日が1からまでの場合7、結果は1、月の日が8から14までの場合、それは 、という2ようになります。したがって:

public static int GetWeekOfMonth(DateTime date)
{
    return (date.Day + 6) / 7;
}

これ/は、オペランド (被除数と除数) が整数の場合に除算が定義される方法により機能します。「/演算子 (C# リファレンス) 」を参照してください。

于 2013-03-02T21:38:49.190 に答える
1
public static int GetWeekOfMonth(DateTime date)
{
  var weekDay = date.DayOfWeek;
  var nth = date.Day / 7;
  if (date.Day % 7 > 0)
  {
    nth++;
  }
  return nth;
}

編集: var weekDay...実際には必要ありません。

于 2013-03-01T06:03:04.140 に答える