Получить понедельник и воскресенье для определенного DateTime в C # - PullRequest
8 голосов
/ 10 ноября 2010

У меня есть, например, дата " 2010-11-09, вторник "

Теперь я хочу получить дату и время понедельника и воскресенья, в которых находится указанная выше дата.

Как бы вы это сделали?

Ответы [ 5 ]

38 голосов
/ 10 ноября 2010

Это, вероятно, то, что вы ищете:

 DateTime date = DateTime.Today;

 // lastMonday is always the Monday before nextSunday.
 // When date is a Sunday, lastMonday will be tomorrow.     
 int offset = date.DayOfWeek - DayOfWeek.Monday;     
 DateTime lastMonday = date.AddDays(-offset);
 DateTime nextSunday = lastMonday.AddDays(6);

Редактировать: поскольку lastMonday не всегда соответствует названию (см. Комментарии), следующая однострочная, вероятно, больше относится кточка:

 DateTime nextSunday = date.AddDays(7 - (int) date.DayOfWeek);
0 голосов
/ 19 апреля 2016
/// <summary>
/// Returns the day that is the specific day of week of the input day.
/// </summary>
/// <param name="input">The input day.</param>
/// <param name="dayOfWeek">0 is Monday, 6 is Sunday.</param>
/// <returns></returns>
public static DateTime GetDayOfWeekOfSpecific(DateTime input, int dayOfWeek)
{
    if(input.DayOfWeek == DayOfWeek.Sunday)
    {
        dayOfWeek -= 7;
    }
    // lastMonday is always the Monday before nextSunday.
    // When today is a Sunday, lastMonday will be tomorrow.     
    int offset = input.DayOfWeek - DayOfWeek.Monday;
    DateTime lastMonday = input.AddDays(-offset);
    DateTime nextDayOfWeek = lastMonday.AddDays(dayOfWeek);
    return nextDayOfWeek;
}
0 голосов
/ 26 мая 2014

Это легко, если вы используете условный метод

if (v_datetime.DayOfWeek== DayOfWeek.Sunday)
{
return true;
}

if (v_datetime.DayOfWeek== DayOfWeek.Monday)
{

}
0 голосов
/ 10 ноября 2010

DateTime Monday = DateTime.Now.AddDays ((DateTime.Now.DayOfWeek - 1) * -1) .Date;

DateTime Sunday = DateTime.Now.AddDays (7 -DateTime.Now.DayOfWeek) .Date;

0 голосов
/ 10 ноября 2010

Примерно так, конечно, вы захотите выйти из цикла в какой-то момент перед DateTime.MaxValue, но это должно сделать:

  DateTime dt = DateTime.Parse("2010-11-09, Thuesday");


        while (dt < DateTime.MaxValue) 
        {

            if(dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Monday)
                Console.WriteLine(dt.ToString());
            dt.AddDays(1);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...