Как рассчитать количество воскресений между двумя датами
Всем Привет,
Я хочу вычислить нет воскресенья между двумя датами.
Пожалуйста, дайте мне знать, как его рассчитать?
Благодарный вам
Мохаммед Васиф
static int CountDays(DayOfWeek day, DateTime start, DateTime end) { TimeSpan ts = end - start; // Total duration int count = (int)Math.Floor(ts.TotalDays / 7); // Number of whole weeks int remainder = (int)(ts.TotalDays % 7); // Number of remaining days int sinceLastDay = (int)(end.DayOfWeek - day); // Number of days since last [day] if (sinceLastDay < 0) sinceLastDay += 7; // Adjust for negative days since last [day] // If the days in excess of an even week are greater than or equal to the number days since the last [day], then count this one, too. if (remainder >= sinceLastDay) count++; return count; }
Помимо того, что на этот вопрос был дан ответ более 4 лет назад, если я создам простую winform и запущу этот код с помощью fdate = DateTime.Теперь и sdate = new DateTime(2015,1,1) я получаю результат 25 вместо 37.
Я получаю правильный ответ с решением 1
Игнорируйте мой комментарий - теперь работает в совершенно новом решении. Не знаю, что происходило раньше, но явно проблема с моей стороны.
Искреннее извинение
DateTime fdate = yourFinishDate; DateTime sdate = yourStartDate; int CountSundays = (1 + fdate.Subtract(sdate).Days + (6 + (int)sdate.DayOfWeek) % 7) / 7;
Помимо того, что на этот вопрос был дан ответ более 4 лет назад, если я создам простую winform и запущу этот код с помощью fdate = DateTime.Теперь и sdate = new DateTime(2015,1,1) я получаю результат 25 вместо 37.
Я получаю правильный ответ с решением 1
Я получаю 37 с моим решением. Возможно, вы набрали его неправильно.
пространство имен ConsoleApplication1
{
классная программа
{
static void Main(string[] args)
{
DateTime sdate = новый DateTime(2015, 1, 1);
Fdate датавремя = Датавремя.Сейчас;
Ptrdate типа datetime = sdate;
int count = 0;
while (ptrdate <= fdate)
{
если (ptrdate.Перечисления DayofWeek == DayofWeek Форматируется.Воскресенье) граф++;
ptrdate = ptrdate.AddDays(1);
}
int mycount = (1 + fdate.Вычитание(sdate).Дни + (6 + (int)sdate.DayOfWeek) % 7) / 7;
Приставка.WriteLine("{0} = {1}", граф, mycount);
Приставка.Линия чтения();
}
}
}
Странный. Я вырезал и вставил его в другой новый проект, и теперь он работает. Должно быть, это была проблема в скретч-решении, которое я использовал ... теперь нужно выяснить, в чем проблема с моей стороны.
Искреннее извинение
Не беспокойтесь. :)
Попробуйте эту логику один раз...Надеюсь, это вам поможет
DateTime startDate = new DateTime(2015, 8, 31); DateTime endDate = DateTime.Now; var day=endDate.Day; TimeSpan diff = endDate - startDate; //int days = diff.Days; int count = 0; for (var i = 0; i < day; i++) { DateTime d = new DateTime(endDate.Year, endDate.Month, i + 1); if (d.DayOfWeek == DayOfWeek.Sunday) { count = count + 1; } } Console.WriteLine(count);
Смотрите код ниже, при условии, что sDate < fDate.
Добавьте условия для управления sDate(startDate) и fDate(finishDate)
//DateTime fdate = DateTime.Now.AddDays(10); DateTime fdate = yourFinishDate; //DateTime sdate = DateTime.Now.AddDays(-1); DateTime sdate = yourStartDate; TimeSpan ts = fdate - sdate; var sundays = ((ts.TotalDays / 7) + (sdate.DayOfWeek == DayOfWeek.Sunday || fdate.DayOfWeek == DayOfWeek.Sunday || fdate.DayOfWeek > sdate.DayOfWeek ? 1 : 0)); sundays = Math.Round(sundays - .5, MidpointRounding.AwayFromZero);