查找当前时间是否落在时间范围内

Joh*_*n M 131 c# datetime timespan

使用.NET 3.5

我想确定当前时间是否落在时间范围内.

到目前为止,我有目前的情况:

DateTime currentTime = new DateTime();
currentTime.TimeOfDay;
Run Code Online (Sandbox Code Playgroud)

我正在搞清楚如何获得转换和比较的时间范围.这会有用吗?

if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay 
    && Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
   //match found
}
Run Code Online (Sandbox Code Playgroud)

更新1:感谢大家的建议.我不熟悉TimeSpan功能.

Fra*_*ack 236

检查一天中的使用时间:

TimeSpan start = new TimeSpan(10, 0, 0); //10 o'clock
TimeSpan end = new TimeSpan(12, 0, 0); //12 o'clock
TimeSpan now = DateTime.Now.TimeOfDay;

if ((now > start) && (now < end))
{
   //match found
}
Run Code Online (Sandbox Code Playgroud)

对于绝对时间使用:

DateTime start = new DateTime(2009, 12, 9, 10, 0, 0)); //10 o'clock
DateTime end = new DateTime(2009, 12, 10, 12, 0, 0)); //12 o'clock
DateTime now = DateTime.Now;

if ((now > start) && (now < end))
{
   //match found
}
Run Code Online (Sandbox Code Playgroud)

  • 下面的答案应该是被接受的答案。。。这个答案不会检查几天的TimeSpans,例如从22:00:00到02:00:00 ... (3认同)
  • 如果不同的日子有不同的时间怎么办?有没有容易比较的?http://stackoverflow.com/questions/22769557/how-to-compare-current-time-against-time-of-day (2认同)

Nic*_*ick 105

这里有一些很好的答案,但没有一个涵盖你的开始时间与你的结束时间不同的一天.如果你需要跨越日界,那么这样的事情可能会有所帮助:

TimeSpan start = TimeSpan.Parse("22:00"); // 10 PM
TimeSpan end = TimeSpan.Parse("02:00");   // 2 AM
TimeSpan now = DateTime.Now.TimeOfDay;

if (start <= end)
{
    // start and stop times are in the same day
    if (now >= start && now <= end)
    {
        // current time is between start and stop
    }
}
else
{
    // start and stop times are in different days
    if (now >= start || now <= end)
    {
       // current time is between start and stop
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在此示例中,时间边界是包含的,并且这仍假设在start和之间的差异小于24小时stop.

  • 谢谢你。答案看起来很简单,但概念化有点尴尬。 (2认同)

JDu*_*ley 17

if (new TimeSpan(11,59,0) <= currentTime.TimeOfDay && new TimeSpan(13,01,0) >=  currentTime.TimeOfDay)
{
   //match found
}
Run Code Online (Sandbox Code Playgroud)

如果你真的想要将字符串解析为TimeSpan,那么你可以使用:

    TimeSpan start = TimeSpan.Parse("11:59");
    TimeSpan end = TimeSpan.Parse("13:01");
Run Code Online (Sandbox Code Playgroud)


And*_*ock 15

一个简单的小扩展功能:

public static bool IsBetween(this DateTime now, TimeSpan start, TimeSpan end)
{
    var time = now.TimeOfDay;
    // If the start time and the end time is in the same day.
    if (start <= end)
        return time >= start && time <= end;
    // The start time and end time is on different days.
    return time >= start || time <= end;
}
Run Code Online (Sandbox Code Playgroud)

  • 好又加安德烈.不会想到对不同的日期案例进行OR比较. (3认同)
  • 伟大的一小段代码,但它的一个问题.如果指定相同的开始和结束时间,该怎么办?一个假设是,它可能意味着它应该跨越24小时,这意味着你检查`start <= end`的条件应该改为`start <end`而另一个假设可能是它在同一天但是如果是这种情况,如果你使用Now.TimeOfDay它可能会失败,因为它包括毫秒并导致超出范围. (3认同)

ste*_*sha 13

尝试在C#中使用TimeRange对象来完成目标.

TimeRange timeRange = new TimeRange();
timeRange = TimeRange.Parse("13:00-14:00");

bool IsNowInTheRange = timeRange.IsIn(DateTime.Now.TimeOfDay);
Console.Write(IsNowInTheRange);
Run Code Online (Sandbox Code Playgroud)

这是我使用TimeRange的例子

  • TimeRange不是来自任何C#库的类.它是一个外部类,可以在上面的链接下载. (12认同)

SLa*_*aks 6

TimeOfDay属性返回一个TimeSpan值.

请尝试以下代码:

TimeSpan time = DateTime.Now.TimeOfDay;

if (time > new TimeSpan(11, 59, 00)        //Hours, Minutes, Seconds
 && time < new TimeSpan(13, 01, 00)) {
    //match found
}
Run Code Online (Sandbox Code Playgroud)

此外,new DateTime()是相同的,DateTime.MinValue并且将始终等于1/1/0001 12:00:00 AM.(值类型不能具有非空的默认值)您想要使用DateTime.Now.