2013-11-11 4 views
0

Я пишу приложение в C#, которому необходимо выполнить код каждые два или три месяца и т. Д., В зависимости от того, в каком месяце был добавлен элемент. Например, если месяц был февраль, он был бы представлен как int со значением 2. Поэтому он должен работать в апреле (4), в июне (6) и т. Д. Я действительно не знаю, как это сделать, любая помощь было бы действительно здоровоC# date loop loop

Вот что я до сих пор

// month is febuary 
string month = monthAsInt(date); 
for(int w= month; month <= 12; w++) 
{ 
w++; 
    //thats not going to work if month is greater than 0 
    if(?) 
    { 
    //execute 
    } 
} 
+3

Вам следует лучше создать таймер и установить соответствующие интервалы. Использование цикла for - гигантская трата вычислительной мощности. – Robert

+1

Почему вы увеличиваете 'w' дважды? –

+0

Ваш вопрос не совсем ясен, чтобы кто-нибудь действительно дал вам правильный ответ. – James

ответ

0

Я wuld предлагаю не изобретать свои функции за действия с DateTime (так как есть много нетривиальной вещи там), а просто реле библиотечным функциям .NET, таким как:

DateTime.AddMonths

DateTime.AddDays

Итак, сначала создайте объект «start» DateTime, после использования этих функций, чтобы сдвинуть дату на желаемый край.

+0

будет это на правильном пути trackstartDate = startDate.AddMonths (интервал); –

+0

если интервал - это количество месяцев o необходимо перейти с указанной даты, да. – Tigran

+0

спасибо, что он тоже работает, оба решения были очень благодарны :) –

1

Наиболее элегантным решением является хранение объекта DateTime (например, сериализация и десериализация его в файле: http://msdn.microsoft.com/en-us/library/vstudio/ms233843.aspx) и сравнить его с текущим каждый раз, когда приложение загружается.

0
int monthJump = 2; 
int month = monthAsInt(date); 
for(int w= month; w <= 12; w = w + monthJump){ 
    //Execute 
} 

Для этого вы говорите, что это должно работать каждые 2 или 3 месяца. Вы просто установить это значение в переменной monthJump и он делает прыжки для вас в петле FOR

Я предполагаю, на основе имени метода, что

string month = monthAsInt(date); 

должен быть

int month = monthAsInt(date); 
0

Возможно, это будет полезно. Просто проверьте разницу в месяц, кратно 2:

DateTime dateAdded; // Your date 
DateTime currentDate = DateTime.Now; 

int dateAddedMonth = dateAdded.Month; 
int currentDateMonth = currentDate.Month; 

int difference = dateAddedMonth - currentDateMonth; 
if (difference % 2 == 0) 
{ 
    // Do your stuff 
} 
+0

Это решение слишком негибкое. Я не думаю, что отличная идея предположить, что интервал всегда будет равным числом месяцев. – James

+0

Просто замените «2» в предложении «if», чтобы сделать его циклическим каждые 3, 4, 5, .. месяцев. Разве это не так? –

+0

Точка, которую я делал, это не правило - правило «запустить код после X-интервала с текущей даты», а не «запустить код, если месяц делится на X». Конечно, вы могли бы реализовать его таким образом, если бы вы указали переменную '% 2', однако для меня вы теряете читаемость. – James