получите энный рабочий день месяца в C# [дубликат]

11
задан Community 23 May 2017 в 12:34
поделиться

4 ответа

Используйте следующий метод расширения:

public static class DateTimeExtensions
{
    ///<summary>Gets the first week day following a date.</summary>
    ///<param name="date">The date.</param>
    ///<param name="dayOfWeek">The day of week to return.</param>
    ///<returns>The first dayOfWeek day following date, or date if it is on dayOfWeek.</returns>
    public static DateTime Next(this DateTime date, DayOfWeek dayOfWeek) { 
        return date.AddDays((dayOfWeek < date.DayOfWeek ? 7 : 0) + dayOfWeek - date.DayOfWeek); 
    }
}

Затем вы можете написать

new DateTime(2010, 07, 01).Next(DayOfWeek.Monday).AddDays((2 - 1) * 7);

Или как функцию:

public DateTime GetNthWeekofMonth(DateTime date, int nthWeek, DayOfWeek dayOfWeek) {
    return date.Next(dayOfWeek).AddDays((nthWeek - 1) * 7);
}

(Мне нужно вычесть единицу, потому что date.Next (dayOfWeek) уже является первое появление этого дня)

22
ответ дан 3 December 2019 в 04:30
поделиться

Один из возможных алгоритмов:

  1. Начать с 1-го числа месяца.
  2. Двигайтесь вперед по одному дню, пока ты получаешь день недели, когда ты находясь в поиске.
  3. Добавьте (7 * N) к дате, на которую вы собираетесь получить желаемое свидание.
2
ответ дан 3 December 2019 в 04:30
поделиться
IEnumerable<DateTime> WeekdaysFrom( DateTime start )
{
    DateTime weekday = start.Add( TimeSpan.FromDays(1) );
    while( weekday < DateTime.MaxValue.Subtract( TimeSpan.FromDays(1) ) )
    {
        while( weekday.DayOfWeek == DayOfWeek.Saturday || weekday.DayOfWeek == DayOfWeek.Sunday )
        {
            weekday.Add( TimeSpan.FromDays(1) );
        }
        yield return weekday;
    }
}

DateTime NthWeekday( DateTime month, int n )
{
    return WeekdaysFrom( new DateTime( month.year, month.month, 1 ) ).Skip(n-1).First();
}
0
ответ дан 3 December 2019 в 04:30
поделиться

Дубликат можно найти здесь: Как определить, является ли заданная дата N-м будним днем месяца?

int d = date.Day; 
return date.DayOfWeek == dow && (d-1)/7 == (n-1); 
0
ответ дан 3 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

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