Нужна функция для получения первого и последнего дня текущей недели

У меня есть две метки «Первый день» и «Последний день», в которые я хочу обновить их при нажатии кнопки.

Мне нужна функция для получения первого дня и последнего дня текущей даты, чтобы я мог отображать ее при нажатии кнопки «Далее» и «Предыдущая».

Вот что у меня есть до сих пор:

CultureInfo cultureInfo = CultureInfo.CurrentCulture; 
DayOfWeek firstDay = cultureInfo.DateTimeFormat.FirstDayOfWeek; 
firstDayInWeek = dayInWeek.Date; 
lastDayInWeek = dayInWeek.Date; 
while (firstDayInWeek.DayOfWeek != firstDay) 
    firstDayInWeek = firstDayInWeek.AddDays(-1);

но не дает мне следующую неделю после этого месяца.

Это то, что именно я ищу:

Любой может помочь заставить это работать, используя одну функцию.


person Hitesh S    schedule 20.10.2012    source источник
comment
Какие дни недели вы считаете первыми и последними? (Разные культуры делают разные вещи в разных контекстах.)   -  person Jon Skeet    schedule 20.10.2012
comment
Что вы пробовали? Просто получите текущий день недели, а затем вычтите и добавьте количество дней между сегодняшним днем ​​и первым/последним днем. Например. если сегодня вторник, вычтите 2, чтобы получить воскресенье, и прибавьте 4, чтобы получить субботу.   -  person Barmar    schedule 20.10.2012
comment
Я использовал этот CultureInfo CultureInfo = CultureInfo.CurrentCulture; DayOfWeek firstDay = CultureInfo.DateTimeFormat.FirstDayOfWeek; первыйДеньНедели = деньНедели.Дата; lastDayInWeek = деньInWeek.Date; в то время как (firstDayInWeek.DayOfWeek != firstDay) firstDayInWeek = firstDayInWeek.AddDays(-1); но не дает мне следующую неделю после этого месяца   -  person Hitesh S    schedule 20.10.2012
comment
@Hitesh Я добавил ваш код к вашему вопросу, вместо того, чтобы комментировать, вы можете в любое время отредактировать свой вопрос, чтобы добавить дополнительную информацию. В следующий раз, прежде чем публиковать вопрос, убедитесь, что вы включили всю информацию о релевантности: описание вашей проблемы, какие исследования вы провели, какой код у вас есть и что не работает с вашим текущим подходом.   -  person nemesv    schedule 20.10.2012


Ответы (3)


Попробуй это :

private static void GetWeek(DateTime now, CultureInfo cultureInfo, out DateTime begining, out DateTime end)
{
    if (now == null)
        throw new ArgumentNullException("now");
    if (cultureInfo == null)
        throw new ArgumentNullException("cultureInfo");

    var firstDayOfWeek = cultureInfo.DateTimeFormat.FirstDayOfWeek;

    int offset = firstDayOfWeek - now.DayOfWeek;
    if (offset != 1)
    {
        DateTime weekStart = now.AddDays(offset);
        DateTime endOfWeek = weekStart.AddDays(6);
        begining = weekStart;
        end = endOfWeek;
    }
    else
    {
        begining = now.AddDays(-6);
        end = now;
    }
}

Пример использования:

DateTime begining;
DateTime end;

var testDate = new DateTime(2012, 10, 10);
GetWeek(testDate, new CultureInfo("fr-FR"), out begining, out end);
Console.WriteLine("Week {0} - {1}", 
                  begining.ToShortDateString(), 
                  end.ToShortDateString()); // will output Week 10/8/2012 - 10/14/2012
person Nasreddine    schedule 25.10.2012

Итак, по нажатию кнопки у вас есть недельный период. Допустим, это определяется начальной датой. Структура DateTime имеет свойство DayOfWeek, которое возвращает перечисление типа DayOfWeek.Sunday. Итак, вот фрагмент кода, который может помочь:

var startOfWeek = DateTime(xx, yy ...); // defined by your business code

var firstDayOfWeek = startOfWeek.DayOfWeek;
var lastDayOfWeek = firstDayOfWeek.AddDays(6).DayOfWeek;

Я не компилировал этот код прямо из головы, так что надеюсь, что все в порядке.

person Rob Smyth    schedule 20.10.2012
comment
Я граблю, я отредактировал свой вопрос с помощью экрана. это то, что я ищу, чтобы завершить свою функциональность. Вы можете помочь мне в этом. - person Hitesh S; 22.10.2012

person    schedule
comment
Когда я запускаю следующую скрипту dotnet, начальный и конечный дни — воскресенье. Если неделя начинается в воскресенье, она должна заканчиваться в субботу? dotnetfiddle.net/lFe32N - person Sjolfr; 19.02.2021