nafeel Ответов: 2

Проверьте дату между двумя датами без использования цикла for


Всем Привет,

У меня есть свидания:-

02/11/2011
25/12/2011
09/12/2011
13/12/2011

и я должен проверить эти даты одну за другой между 01/11/2011 и 15/12/2011.

Если какая-либо из вышеперечисленных дат лежит между заданной датой, то она должна возвращать значение, показывающее дату, существующую и несуществующую, например(1 для несуществующей и 0 для несуществующей), и цикл не должен двигаться больше. пожалуйста, помогите мне, как это сделать.

Что я уже пробовал:

protected void FindDate()
    {
        DateTime d1 = new DateTime(2011, 11, 2);
        
        DateTime StartDate = new DateTime(2011, 11, 01);
        DateTime EndDate = new DateTime(2011, 12, 15);
        int DayInterval = 1;

        List<datetime> dateList = new List<datetime>();
        while (StartDate.AddDays(DayInterval) <= EndDate)
        {
            StartDate = StartDate.AddDays(DayInterval);
            dateList.Add(StartDate);
            if (StartDate == d1)
            {
                Response.Write(d1.ToString() + " Exist");
            }
        }        
    }

ZurdoDev

Я не понимаю вашего вопроса, но если вы хотите вырваться из цикла while, вы можете использовать разрыв кода;

2 Ответов

Рейтинг:
2

Maciej Los

Не уверен, что вы имеете в виду, говоря:

Вы можете проверить, существует ли дата в диапазоне дат, используя несколько методов, например, с помощью Linq:
Чтобы получить количество дат в диапазоне дат

List<DateTime> dates = new List<DateTime>();
dates.AddRange(new DateTime[]{new DateTime(2011, 11, 2),
	new DateTime(2011, 12, 25),
	new DateTime(2011, 12, 9),
	new DateTime(2011, 12, 13)});

DateTime startDate = new DateTime(2011, 11, 1);
DateTime endDate = new DateTime(2011, 12, 15);

var CountOfDatesInDateRange = dates.Count(x => x >= startDate && x <= endDate);

Console.WriteLine("Count of dates in date range is: {0}", CountOfDatesInDateRange);
//return 3


Чтобы получить список дат в диапазоне дат

var DatesRange = dates
	.Select(x=> new
		{
			Date = x,
			IsInRange = x>=startDate && x<= endDate
		});
		
foreach(var o in DatesRange)
{
	Console.WriteLine("{0} {1} date range: {2} - {3}", o.Date.ToString("yyyy/MM/dd"), o.IsInRange ? "is in" : "is NOT in", 
						startDate.ToString("yyyy/MM/dd"), endDate.ToString("yyyy/MM/dd"));
}
//returns:
//2011-11-02 is in date range: 2011-11-01 - 2011-12-15
//2011-12-25 is NOT in date range: 2011-11-01 - 2011-12-15
//2011-12-09 is in date range: 2011-11-01 - 2011-12-15
//2011-12-13 is in date range: 2011-11-01 - 2011-12-15


Рейтинг:
1

OriginalGriff

Почему?
Подумайте об этом: если какая-либо из ваших дат находится между датой начала и датой окончания, то она находится между ними: перемещение даты начала вверх на день в цикле не делает ничего полезного.
Вместо этого подумайте вот о чем:

if (StartDate <= dt1 && dt1 <= EndDate)
   {
   Response.Write(string.Format("{0} exists.", dt1));
   }
Если вы делаете это для того чтобы добавить все даты то это довольно просто Linq:
dateList.AddRange(Enumerable.Range(0, EndDate.Subtract(StartDate).Days + 1).Select(d => StartDate.AddDays(d)));