Проверьте, попадает ли экземпляр datetime между двумя другими объектами datetime
Я хотел бы знать простой алгоритм, чтобы проверить, находится ли данный экземпляр datetime
между двумя другими экземплярами в C#
.
Примечание:
Я просмотрел это Как проверить, существует ли данный объект datetime и между ними? два datetimes?, и это было для python и еще много для php. Большинство других вопросов касалось различий между ними.
Детали:
Я более конкретный о времени, дата не имеет значения для меня. Например, я получил запись DataBase
для сотрудника, который работает между 10:00
Am - 9:00
Pm и мной, как главным [например], хотел бы знать, какой штат занят классом в данный момент, например 2:00 Pm
. Теперь это вернет мне данные о персонале, которые участвуют в это время.
Ответы
Ответ 1
DateTime.Ticks будет учитывать время. Используйте .Ticks в DateTime, чтобы преобразовать даты в longs. Затем просто используйте простую, если stmt, чтобы увидеть, находится ли ваша целевая дата между ними.
// Assuming you know d2 > d1
if (targetDt.Ticks > d1.Ticks && targetDt.Ticks < d2.Ticks)
{
// targetDt is in between d1 and d2
}
Ответ 2
Простой сравнения > и
if (dateA>dateB && dateA<dateC)
//do something
Если вы заботитесь только о времени:
if (dateA.TimeOfDay>dateB.TimeOfDay && dateA.TimeOfDay<dateC.TimeOfDay)
//do something
Ответ 3
Вы можете использовать:
if ((DateTime.Compare(dateToCompare, dateIn) == 1) && (DateTime.Compare(dateToCompare, dateOut) == 1)
{
//do code here
}
или
if ((dateToCompare.CompareTo(dateIn) == 1) && (dateToCompare.CompareTo(dateOut) == 1))
{
//do code here
}
Ответ 4
Напишите себе вспомогательную функцию:
public static bool IsBewteenTwoDates(this DateTime dt, DateTime start, DateTime end)
{
return dt >= start && dt <= end;
}
Затем позвоните: .IsBewteenTwoDates(DateTime.Today, new DateTime (,));
Ответ 5
Вы можете использовать:
if (date >= startDate && date<= EndDate) { return true; }
Ответ 6
Это поможет.
public static int year1, year2, year3, month1, month2, month3, day1, day2, day3;
public static string dateA, dateB, dateC;
static bool iswithindaterange(string dateA, string dateB, string dateC)
{
month1 = Convert.ToInt32((dateA.Split('/'))[0]); // Splits the value of the string on the '/' into month , day and year
day1 = Convert.ToInt32((dateA.Split('/'))[1]);
year1 = Convert.ToInt32((dateA.Split('/'))[2]);
month2 = Convert.ToInt32((dateB.Split('/'))[0]);
day2 = Convert.ToInt32((dateB.Split('/'))[1]);
year2 = Convert.ToInt32((dateB.Split('/'))[2]);
month3 = Convert.ToInt32((dateC.Split('/'))[0]);
day3 = Convert.ToInt32((dateC.Split('/'))[1]);
year3 = Convert.ToInt32((dateC.Split('/'))[2]);
DateTime startdate = new DateTime(year1, month1, day1);
DateTime enddate = new DateTime(year2, month2, day2);
DateTime checkdate = new DateTime(year3, month3, day3);
if (checkdate >= startdate && checkdate <= enddate)
{
return true;
}
else
{
return false;
}
}
static void Main(string[] args)
{
dateA = "1/22/2016"; // Date Format (MM/dd/YYYY)
dateB = "9/20/2016";
dateC = "5/18/2016";
bool answer;
answer = iswithindaterange(dateA, dateB, dateC);
if (answer == true)
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
}