2015-01-14 3 views
-4

У меня есть два datetimepickers. Поэтому я хочу получить дни недели между выбранными значениями.Получите дни недели между двумя выбранными датами

Пример: date1 = 14/1/2015 и date2 = 17/1/2015

Так что результат должен быть: days = Wed. Thu. Fri. Sat.

+2

Могу ли я спросить, что вы пробовали? Можете ли вы поделиться своими усилиями, чтобы мы могли видеть, что вы пробовали, это поможет нам понять, где все идет не так, чтобы мы могли помочь вам лучше. Как бы то ни было, он читается так: «сделайте мою работу для меня», которая может быть плохо воспринята. Вы можете [отредактировать свой пост] (http://stackoverflow.com/posts/27938399/edit) – MyDaftQuestions

+0

дней недели == 7 дней в неделю или рабочих дней (т. Е. Без воскресенья, без субботы)? – DrKoch

+0

Вы что-то пробовали? Ваша проблема может быть легко решена простым прохождением с даты1 до даты2 –

ответ

2

Вы можете легко перебирать ваши DateTime значения, как;

var dt1 = new DateTime(2015, 1, 14); 
var dt2 = new DateTime(2015, 1, 17); 
while (dt2 >= dt1) 
{ 
    Console.WriteLine(dt1.DayOfWeek); 
    dt1 = dt1.AddDays(1); 
} 

Результат будет;

Wednesday 
Thursday 
Friday 
Saturday 

Если вы хотите их abbreviated day names, как Wed, Thu, Fri, Sat, вы можете использовать "ddd" custom format specifier с английского на основе культуры (как InvariantCulture) нравится;

var dt1 = new DateTime(2015, 1, 14); 
var dt2 = new DateTime(2015, 1, 17); 
while (dt2 >= dt1) 
{ 
    Console.WriteLine(dt1.ToString("ddd", CultureInfo.InvariantCulture)); 
    dt1 = dt1.AddDays(1); 
} 
+0

@ Downvoter позаботится прокомментировать хотя бы, чтобы я мог видеть, где я могу ошибаться? –

5

Вы хотите получить DayOfWeek S всех DateTime с между двумя датами?

int daysDiff = (date2 - date1).Days; 
List<DayOfWeek> days = Enumerable.Range(0, daysDiff + 1) // +1 because you want to include start and end date 
    .Select(d => date1.AddDays(d).DayOfWeek) 
    .ToList(); 

Вам нужно добавить using System.Linq;

0

Другой вариант, который включает в себя не-обычное использование для цикла и yield return заявление:

void Main() 
{ 
    var daysOfWeek = DaysBetween(
     new DateTime(2015, 1, 14), 
     new DateTime(2015, 1, 17)); 

    Console.WriteLine(
     String.Join(", ", daysOfWeek.Select(d => d.ToString().Substring(0, 3)))); 

    // prints: Wed, Thu, Fri, Sat 
} 

IEnumerable<DayOfWeek> DaysBetween(DateTime start, DateTime end) 
{ 
    for (var dateTime = start; dateTime <= end; dateTime = dateTime.AddDays(1)) 
    { 
     yield return dateTime.DayOfWeek; 
    } 
} 
Смежные вопросы