2015-06-07 2 views
0

Я пытаюсь извлечь даты для текущей недели, и я просто не могу найти разумный, умный способ вместо долгого случая, переключатели и заявления if. Кто-нибудь знает относительно простой способ извлечения тех, кто использует .Net? Спасибо!Извлечение дат текущей недели с использованием .Net?

+1

Покажите, что вы пробовали, и почему вы ищете другой aproach. – Fabio

+0

Еще не началось. У меня есть мысленный образ езды на велосипеде каждый день и добавление или вычитание дней в соответствии со значением «Сегодня». Я просто надеюсь, что существует более разумный подход. –

+0

Попробуйте 'DateTime.Now.DayOfWeek', а затем, основываясь на результатах, укажите другие даты той же недели. – Fabio

ответ

3

DateTime.DayOfWeek - это перечисление, которое начинается с воскресенья 0 и вперед. Если вы возьмете сегодняшний день недели, он также расскажет, сколько дней назад было воскресенье. Поэтому вернемся к тому, что многие дни дадут вам воскресенье этой недели, предполагая, что неделя начнется в воскресенье. Вы можете перейти от этого к семи дням недели.

var today = DateTime.Now; 
var thisSunday = today.AddDays(-(int)today.DayOfWeek); 

for (int i=0; i<7; i++) 
    Console.WriteLine(thisSunday.AddDays(i).ToString()); 

Если неделя начинается с понедельника, используйте

var thisMonday = today.AddDays(-(((int)today.DayOfWeek + 6) % 7)); 
+0

Хмм интересно .. Я думаю, что это решение может сделать трюк. Спасибо большое приятель! –

+0

Возможно, было бы лучше разветвиться в обоих направлениях с указанной даты и проверить номер недели, таким образом, у вас будет код, который будет независимым от культуры. Не все культуры начинают свои недели в воскресенье. –

+0

@ LasseV.Karlsen Да, поэтому я добавил вариант на несколько недель, начиная с понедельника. Его также можно легко изменить, чтобы начать с желаемого рабочего дня, если это необходимо. –

0

Вы можете использовать метод расширения для установки в тот день, неделю начать с (credit goes to @Compile This)

public static class DateTimeExtensions 
{ 
    public static DateTime StartOfWeek(this DateTime datetime, DayOfWeek startOfWeek) 
    { 
     int difference = datetime.DayOfWeek - startOfWeek; 
     if (difference >= 0) 
      return datetime.AddDays(-1 * difference).Date; 
     difference += 7; 
     return datetime.AddDays(-1 * difference).Date; 
    } 
} 

Тогда вы можете получить дату недели, используя тот же цикл, что и @Sami_Kuhmonen:

 DateTime d = DateTime.Now.StartOfWeek(DayOfWeek.Saturday); 
     for (int i = 0; i < 7; i++) 
      Console.WriteLine(d.AddDays(i)); 
Смежные вопросы