Mohd Wasif Ответов: 4

Как рассчитать количество воскресений между двумя датами


Всем Привет,

Я хочу вычислить нет воскресенья между двумя датами.

Пожалуйста, дайте мне знать, как его рассчитать?

Благодарный вам
Мохаммед Васиф

4 Ответов

Рейтинг:
2

Krunal Rohit

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;
   }

[источник]

-КРОНА


CHill60

Помимо того, что на этот вопрос был дан ответ более 4 лет назад, если я создам простую winform и запущу этот код с помощью fdate = DateTime.Теперь и sdate = new DateTime(2015,1,1) я получаю результат 25 вместо 37.
Я получаю правильный ответ с решением 1


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

Рейтинг:
1

Malcolm J

DateTime fdate = yourFinishDate;
DateTime sdate = yourStartDate;

int CountSundays = (1 + fdate.Subtract(sdate).Days + (6 + (int)sdate.DayOfWeek) % 7) / 7;


CHill60

Помимо того, что на этот вопрос был дан ответ более 4 лет назад, если я создам простую winform и запущу этот код с помощью fdate = DateTime.Теперь и sdate = new DateTime(2015,1,1) я получаю результат 25 вместо 37.
Я получаю правильный ответ с решением 1

Malcolm J

Я получаю 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);
Приставка.Линия чтения();
}
}
}

CHill60

Странный. Я вырезал и вставил его в другой новый проект, и теперь он работает. Должно быть, это была проблема в скретч-решении, которое я использовал ... теперь нужно выяснить, в чем проблема с моей стороны.
Искреннее извинение

Malcolm J

Не беспокойтесь. :)

Рейтинг:
1

Shivaram_i

Попробуйте эту логику один раз...Надеюсь, это вам поможет

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);


Спасибо..


Рейтинг:
0

Pong D. Panda

Смотрите код ниже, при условии, что 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);


Кстати, код на c#. Удачи вам!