我正在以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...
}
答案 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
后,start
和end
都包含等于日期的组件。这意味着end
时间早于> start
时间。但是,如果您通过end
时间,那不到start
时间,那么您实际上是指,end
时间是第二天的时间。
因此,如果end
的时间组件小于start
的时间组件,则只需将1天添加到end
,您就可以从start
迭代到end
remove_index
。