我需要知道Date是否在DateRange之間。我有三個日期:如何知道DateTime是否在C#中的DateRange之間
// The date range
DateTime startDate;
DateTime endDate;
DateTime dateToCheck;
簡單的解決方案是做一個比較,但有沒有更聰明的方法來做到這一點?
在此先感謝。
我需要知道Date是否在DateRange之間。我有三個日期:如何知道DateTime是否在C#中的DateRange之間
// The date range
DateTime startDate;
DateTime endDate;
DateTime dateToCheck;
簡單的解決方案是做一個比較,但有沒有更聰明的方法來做到這一點?
在此先感謝。
不,做一個簡單的比較,對我來說很好:
return dateToCheck >= startDate && dateToCheck < endDate;
事情要考慮,雖然:
DateTime
在時區方面有點古怪型。它可能是UTC,它可能是「本地」,它可能是模糊的。確保你比較蘋果和蘋果。是的。確保你比較的'DateTime'屬於同一類型(UTC/Local),這很重要。用不同種類的原始時間進行比較,而不是將其轉換爲常見的種類。 – CodesInChaos 2011-01-24 11:57:57
`return startDate <= dateToCheck && dateToCheck
@MauricioMorales:這取決於;有些人會發現閱讀「左右不變」的位置(檢查日期)會更容易。這是我傾向於做的。我可以看到「按時間順序」方法的優點,但我認爲我個人更喜歡這種方式。 – 2014-06-10 19:07:34
您可以使用:
return (dateTocheck >= startDate && dateToCheck <= endDate);
通常我創建Fowler's Range實施這樣的事情。
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);
}
}
用法很簡單:
DateRange range = new DateRange(startDate, endDate);
range.Includes(date)
你可以使用擴展方法,使之更加易讀一點:
public static class DateTimeExtensions
{
public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate)
{
return dateToCheck >= startDate && dateToCheck < endDate;
}
}
現在你可以這樣寫:
dateToCheck.InRange(startDate, endDate)
我找到了以下庫在做任何類型的日期數學時最有幫助。我仍然很驚訝,這是.NET框架的一部分。
http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET
的明智之選,然後只檢查日期是否是這些日期間? – 2011-01-24 11:50:26
那麼什麼比簡單的解決方案更聰明? – Polyfun 2011-01-24 11:50:47