如果开始时间大于结束时间,如何以间隔划分时间范围

时间:2016-08-30 10:38:27

标签: c# asp.net datetime

我正在以24小时时钟格式接受用户的时间范围。如果开始时间小于结束时间,则下面的代码有效。以下代码将给定时间范围与间隔分开。

我应该如何处理开始时间小于结束时间的情况。例如。如果开始时间是21:00(晚上9点),结束时间是03:00(凌晨3点)。我知道如何划分开始时间大于结束时间的时间范围?

DateTime start = DateTime.ParseExact(txtStartTime.Text.Trim(),"HH:mm", null);
DateTime end = DateTime.ParseExact(txtEndTime.Text.Trim(), "HH:mm", null);

int interval = Convert.ToInt32(txtSessionDuration.Text.Trim());
for (DateTime i = start; i < end; i = i.AddMinutes(interval)) 
{
       //some code goes here...
}

4 个答案:

答案 0 :(得分:0)

  

我应该如何处理Start Time小于End的情况   时间?

你不能比较他们的.TimeOfDay属性吗?等;

if(start.TimeOfDay < end.TimeOfDay)

或者更确切地说,您可以将它们解析为TimeSpan并直接进行比较。

答案 1 :(得分:0)

你可以做到

DateTime start = DateTime.ParseExact(DateTime.Now().ToString("dd/MM/yyyy") + txtStartTime.Text.Trim(),"dd/MM/yyyy HH:mm", null);
DateTime end = DateTime.ParseExact(DateTime.Now().ToString("dd/MM/yyyy") + txtEndTime.Text.Trim(), "dd/MM/yyyy HH:mm", null);

if(start.TimeOfDay < end.TimeOfDay)
{
     // do stuff here
}

答案 2 :(得分:0)

使用时间跨度:

DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;  
Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime);      
// The example displays the following output:
//       6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00

参考:https://msdn.microsoft.com/en-us/library/system.timespan(v=vs.110).aspx

答案 3 :(得分:0)

当结束时间小于开始时间时,假设没有用户错误且用户想要获取间隔。

由于DateTime不仅包含时间组件,还包含日期组件,因此如果结束时间小于开始时间,我们可以简单地添加一天。您应该按如下方式修改代码:

    DateTime start = DateTime.ParseExact(txtStartTime.Text.Trim(),"HH:mm", null);
    DateTime end = DateTime.ParseExact(txtEndTime.Text.Trim(), "HH:mm", null);
    if (end < start)
    {
        end = end.AddDays(1);
    }

    int interval = Convert.ToInt32(txtSessionDuration.Text.Trim());
    for (DateTime i = start; i < end; i = i.AddMinutes(interval)) 
    {
           //some code goes here...
    }

从字符串解析DateTime后,startend都包含等于日期的组件。这意味着end时间早于> start时间。但是,如果您通过end时间,那不到start时间,那么您实际上是指,end时间是第二天的时间。

因此,如果end的时间组件小于start的时间组件,则只需将1天添加到end,您就可以从start迭代到end remove_index