2015-09-24 109 views
0

我要定義一個時間間隔,並檢查是否System.DateTime.Now是區間內。有沒有辦法做到這一點?看來您只能使用TimeSpan定義特定的時間。有沒有辦法定義在C#中的時間間隔?

我想我可以定義兩個入庫時間間隔的開始和結束,但我認爲這樣可以節省大量的時間,如果我可以定義的時間間隔,並用它來直接比較。

+0

使用'TimeSpan'的開始和結束聽起來很奇怪。你是否在尋找類似「每天9-10AM」的東西? –

回答

4

首先,我不會使用DateTime.Now - 假設您真的希望它是經過時間的間隔而不是本地時間,那麼您幾乎肯定會使用DateTime.UtcNow。當地時間的間隔可能導致一些非常奇怪的行爲,例如如果您將它設置爲當地時間01:45至02:15,則當天時間在凌晨2點返回...

但除此之外,您可以將其定義在兩個DateTimeDateTimeOffset之間的值 - I不會爲此使用TimeSpan

或者,你可以用我的Noda Time項目,它已經定義了一個Interval型...(而且,海事組織,更好的日期/時間API一般......這將是比較難以意外犯這樣的錯誤有關使用本地值使用野田佳彥時間間隔,例如)

2

只需使用兩個日期時間和核查一下。

1

您可以創建這樣一個類:

class TimeInterval 
{ 
    private DateTime start; 
    private DateTime end; 
    public TimeInterval(DateTime start, DateTime end) 
    { 
    this.start = start; 
    this.end = end; 
    } 
    public bool Contains(DateTime moment) 
    { 
    return moment >= this.start && moment <= this.end; 
    } 
} 

就用這樣的:

var interval = new TimeInterval(new DateTime(2015, 9, 23), new DateTime(2015, 9, 25)); 
interval.Contains(DateTime.Now); 

但請確保您使用的所有DateTime是否是森達那種(本地,UTC或不指定)的。

1

我沒有想出這個我自己,我不記得在那裏我舉起它,但我一般都採用這種結構對於這樣的事情:

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(DateTime.Today, DateTime.Today.AddDays(1)); 

range.Includes(DateTime.Now); 

當然,你可以使用相同的接口噸o爲各種類型定義範圍,但DateTime主要是我用它的。

相關問題