有没有办法用C#来定义时间间隔?
我想定义一个时间间隔,并检查有没有办法用C#来定义时间间隔?,c#,.net,C#,.net,我想定义一个时间间隔,并检查System.DateTime.Now是否在该时间间隔内。有办法吗?似乎您只能使用TimeSpan定义特定的时间 我想我可以为时间间隔的开始和结束定义两个时间间隔,但如果我可以定义时间间隔并直接使用它进行比较,我认为这可以节省很多时间。只需使用两个日期时间并对照它们进行检查。首先,我不会使用DateTime。现在-您几乎肯定应该使用DateTime.UtcNow,假设您真的希望它是经过的时间间隔而不是本地时间。当地时间的间隔可能会导致一些非常奇怪的行为,例如,如果您将
System.DateTime.Now
是否在该时间间隔内。有办法吗?似乎您只能使用TimeSpan定义特定的时间
我想我可以为时间间隔的开始和结束定义两个时间间隔,但如果我可以定义时间间隔并直接使用它进行比较,我认为这可以节省很多时间。只需使用两个日期时间并对照它们进行检查。首先,我不会使用
DateTime。现在
-您几乎肯定应该使用DateTime.UtcNow
,假设您真的希望它是经过的时间间隔而不是本地时间。当地时间的间隔可能会导致一些非常奇怪的行为,例如,如果您将其设置为当地时间01:45至02:15,则在时钟返回凌晨2点的那一天
但除此之外,您可以将其定义为介于两个DateTime
或DateTimeOffset
值之间-我不会为此使用TimeSpan
或者,您可以使用我的项目,它已经定义了一个类型。。。(在我看来,这是一个更好的日期/时间API……例如,使用Noda time为间隔使用本地值会比较难出错)您可以创建如下类:
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);
但是,请确保您使用的所有日期时间都是sime类型(本地、Utc或未指定)。我不是自己想到的,也不记得是从哪里提出来的,但我通常使用这种结构来处理这类事情:
public interface IRange<T>
{
T Start { get; }
T End { get; }
bool Includes(T value);
bool Includes(IRange<T> range);
}
当然,您可以使用相同的界面为各种类型定义范围,但DateTime主要是我使用它的目的。使用
TimeSpan
作为开始和结束听起来很奇怪。你在找“每天早上9点到10点”之类的东西吗?
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);