Jak sprawdzić, czy DateTime jest pomiędzy DateRange w C#
Muszę wiedzieć, czy Data jest między DateRange. Mam trzy daty:
// The date range
DateTime startDate;
DateTime endDate;
DateTime dateToCheck;
Łatwym rozwiązaniem jest porównanie, ale czy jest na to mądrzejszy sposób?
Z góry dzięki. 57
Author: Daniel Peñalba, 2011-01-24
5 answers
Nie, Robienie prostego porównania wygląda mi dobrze:
return dateToCheck >= startDate && dateToCheck < endDate;
Things to thought about thought:
-
DateTime
jest nieco dziwnym typem pod względem stref czasowych. Może być UTC, może być "lokalne", może być niejednoznaczne. Upewnij się, że porównujesz jabłka z jabłkami. - zastanów się, czy twoje punkty początkowe i końcowe powinny być włączone, czy wyłączne. Zrobiłem powyższy kod traktować go jako inclusive dolnej granicy i wyłącznej górnej granicy.
98
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 11:50:12
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 11:50:12
Zazwyczaj tworzę implementację Fowler ' s Range dla takich rzeczy.
public interface IRange<T>
{
T Start { get; }
T End { get; }
bool Includes(T value);
bool Includes(IRange<T> range);
}
public class DateRange : IRange<DateTime>
{
public DateRange(DateTime start, DateTime end)
{
Start = start;
End = end;
}
public DateTime Start { get; private set; }
public DateTime End { get; private set; }
public bool Includes(DateTime value)
{
return (Start <= value) && (value <= End);
}
public bool Includes(IRange<DateTime> range)
{
return (Start <= range.Start) && (range.End <= End);
}
}
Użycie jest dość proste:
DateRange range = new DateRange(startDate, endDate);
range.Includes(date)
53
Author: Sergey Berezovskiy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-01 11:20:38
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-01 11:20:38
Możesz użyć metod rozszerzeń, aby uczynić go trochę bardziej czytelnym:
public static class DateTimeExtensions
{
public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate)
{
return dateToCheck >= startDate && dateToCheck < endDate;
}
}
Teraz możesz napisać:
dateToCheck.InRange(startDate, endDate)
33
Author: Elian Ebbing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 13:12:33
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 13:12:33
Możesz użyć:
return (dateTocheck >= startDate && dateToCheck <= endDate);
7
Author: WraithNath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 11:50:50
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 11:50:50
Znalazłem poniższą bibliotekę, która jest najbardziej pomocna przy robieniu jakiejkolwiek matematyki Randkowej. Nadal jestem zdumiony, że nic takiego nie jest częścią. Net framework.
Http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET
4
Author: landerud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 21:52:49
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 21:52:49