2013-04-24 3 views
4

У меня есть период дней, и я хочу пройти через него и выполнить тот же код для каждой даты.C#: DateTime - переход через несколько дней?

начинают и конец являются DateTime формат с разницей в месяц, по крайней мере

while (!(begin.Equals(end))) 
     { 
      ...some code here...    
      begin = begin.AddDays(1); 
     } 
  1. я не уверен, если он автоматически обновляет значение месяца, когда значение достигает день конец точного месяца (в точный год) - например, в феврале не всегда одинаковое количество дней, поэтому ...

  2. Есть ли лучший/более короткий/лучший способ увеличить дату на один день? Например, примерно следующее: begin.Day++; или это: begin++;?

Я не привык к C#, но так жаль, что задал этот хронический вопрос и заранее заблаговременно за любой ответ.

+1

Что вам мешает самотестировать? – MarcinJuraszek

+0

Я не закончил с внутренним кодом, и мне нравится проверять все, когда у меня есть все части кода, которые я хочу, даже если это означает, что у меня могут быть проблемы в первых частях. Я глупый, я знаю.Мне просто лучше, чтобы у меня было больше строк, не зная, будут ли они в порядке или нет: | (без ошибок и предупреждения для меня достаточно для начала: D) –

ответ

5

1) Да, это так. Вся арифметика дат обрабатывается правильно для вас.

2) Да, есть. Вы можете сделать:

var oneDay = TimeSpan.FromDays(1); 
... 
begin += oneDay; 

Вы можете также использовать for цикл:

var oneDay = TimeSpan.FromDays(1); 

for (DateTime currentDay = begin; currentDay < end; currentDay += oneDay) 
{ 
    // Some code here. 
} 

Один последний момент: Если вы хотите быть уверены, чтобы игнорировать компонент времени, вы можете убедиться в том, что время часть даты начала и окончания установлены в полночь следующим образом:

begin = begin.Date; 
end = end.Date; 

Проверьте, что у вас есть какие-то исправления. Цикл идет в то время как currentDay < end - но вам может понадобиться currentDay <= end, если ваш временной диапазон включен, а не эксклюзив.

0

Код, который вы опубликовали, является правильным и должен работать нормально. И не волнуйтесь, AddDays method автоматически увеличит месяц и год при необходимости.

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

for (DateTime date = startDate; date < endDate; date = date.AddDays(1)) 
{ 
    // Your code here 
} 
+0

Это не сработает. Даты являются неизменяемыми, а AddDays возвращает новый экземпляр – adrianm

+0

@adrianm. Я пропустил часть задания в конце объявления цикла цикла. Теперь это исправлено. –

2

ли это так (не сравнить равенства, потому что часы могут быть разными, и цикл продолжается вечно).

while (begin <= end) 
    { 
     ...some code here...    
     begin = begin.AddDays(1); 
    } 
+0

+1, я собирался сделать то же самое ... вы меня избили! – series0ne

+0

Я вообще не думал о времени, потому что я устанавливаю дату только там, поэтому спасибо за ваш вопрос. –

0

Вы могли бы попробовать это, я думаю, это немного более лаконичным:

while (DateTime.Compare(begin, end) < 0) 
{ 
    /* Some code here */ 
    begin = begin.AddDays(1); 
} 

объект DateTime знает, как прирастить месяцы, годы и т.д. в зависимости от обстоятельств, так что вам не нужно беспокоиться об этом.

 Смежные вопросы

  • Нет связанных вопросов^_^