Я пытаюсь получить начало недели с определенной даты. Например, если я передал DateTime 16/08/2018, я бы ожидал возвращения 13/08/2018. Все, что я нашел, - это найти начало текущей недели.
4 ответа
Я бы сделал что-то вроде этого:
Разобрать дату от строки до объекта DateTime (если требуется)
Добавить дни текущего дня недели * -1 (превратить в минус) + 1
string s = "2018-08-23 13:26";
DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
DateTime startOfWeek = dt.AddDays(((int)(dt.DayOfWeek) * -1) + 1);
Console.WriteLine(startOfWeek);
Изменить: Если вас беспокоит, что воскресенье наступит в следующий понедельник, то измените воскресенье, чтобы убрать 7 дней из текущей даты следующим образом;
string s = "2018-08-17 13:26";
DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
bool isSunday = dt.DayOfWeek == 0;
var dayOfweek = isSunday == false ? (int)dt.DayOfWeek : 7;
DateTime startOfWeek = dt.AddDays(((int)(dayOfweek) * -1) + 1);
Console.WriteLine(startOfWeek);
Получить понедельник и воскресенье недели с переменной даты. Можно легко попробовать с переменной даты.
DateTime date = new DateTime(2019, 12, 1);
int day = (int) date.DayOfWeek;
DateTime Monday = date.AddDays((-1) * (day == 0 ? 6 : day - 1));
DateTime Sunday = date.AddDays((1) * (day== 0 ? day : 7 - day)); ```
Вот версия дает вам понедельник недели (предполагается, что недели начинаются в понедельник и заканчиваются в воскресенье)
DateTime dt = DateTime.Now;
DateTime startOfWeek = dt.AddDays((((int)(dt.DayOfWeek) + 6) % 7) * -1);
Console.WriteLine(startOfWeek);
Супер просто! Вы можете использовать DayOfWeek, чтобы узнать, как далеко вы должны уйти. Дополнительная информация доступна здесь
Воскресенье - 0, понедельник - 1.
DateTime date = DateTime.Now; //gets current time
int day = date.DayOfWeek; //gets current day
DateTime Sunday = date.AddDays( (-1) * day ); //go back all the days to get to Sunday
DateTime Monday = date.AddDays( (-1) * (day - 1) ); //go back all the days - 1 to get to Monday
Как отмечено в комментарии, это не работает, если текущий день в воскресенье ... Итак, исправление в понедельник:
DateTime Monday = date.AddDays( (-1) * (day == 0 ? 7 : day - 1) ); //go back all the days - 1 to get to Monday
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.