Как найти третью пятницу месяца с C #?

Вы должны использовать блочный визуальный режим ( Ctrl + v ). Затем d для удаления блока, p или P для вставки блока.

25
задан Paul Fryer 24 March 2011 в 15:58
поделиться

1 ответ

Я записал расширенную версию кода @justcoding121, который может добраться с прошлого дня месяца. Я не знаю, что этот алгоритм является правильным, но он работает до сих пор.

public static int? GetNthDayOfWeekInMonth(int year, int month, DayOfWeek dow, int weekNumOfMonth)
{
    if (weekNumOfMonth < -5 || weekNumOfMonth == 0 || weekNumOfMonth > 5)
        throw new ArgumentOutOfRangeException("weekNumOfMonth", $"must be between 1~5 or -1~-5. ({weekNumOfMonth})");

    int daysOfMonth = DateTime.DaysInMonth(year, month);

    if (weekNumOfMonth > 0)
    {
        var firstDay = new DateTime(year, month, 1);
        var firstDayOfTargetDOW = (int)dow - (int)firstDay.DayOfWeek;
        if (firstDayOfTargetDOW < 0)
            firstDayOfTargetDOW += 7;
        var resultedDay = (firstDayOfTargetDOW + 1) + (7 * (weekNumOfMonth - 1));

        if (resultedDay > daysOfMonth)
            return null;

        return resultedDay;
    }
    else
    {
        var lastDay = new DateTime(year, month, daysOfMonth);
        var firstDayOfTargetDOW = (int)lastDay.DayOfWeek - (int)dow;
        if (firstDayOfTargetDOW < 0)
            firstDayOfTargetDOW += 7;
        var resultedDay = firstDayOfTargetDOW + (7 * (Math.Abs(weekNumOfMonth) - 1));

        if (resultedDay > daysOfMonth)
            return null;

        return (daysOfMonth - resultedDay);
    }
}

использование

Assert.AreEqual(02, DateTimeHelper.GetNthDayOfWeekInMonth(2019, 11, DayOfWeek.Saturday, 1));
Assert.AreEqual(30, DateTimeHelper.GetNthDayOfWeekInMonth(2019, 11, DayOfWeek.Saturday, -1));
0
ответ дан 28 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: