我有此表格,教师可以在其中输入时间和日期,她可以自由参加面试。在下面的示例中,教师在1月16日的一个小时有空。教师单击关闭后,数据将输入到 sql server表中。
我想做的是从数据库中获取数据并将其显示在学生页面上。但是,拆分后,学生应该可以看到它。这是因为每次面试仅需 15分钟。从分段时间(02:15到02:20等)中,学生可以选择哪个时间是他的首选时间。
我不知道该如何表达这个问题。我知道这可能会令人困惑,但是如果有人理解,请帮助我!
答案 0 :(得分:0)
如何获得两次之间的持续时间并将其分成几分钟?
最简单的答案是:您找到总分钟数,然后将其除以某个段中的分钟数(采访时长)。
如果我对您的理解正确,那么您已经从数据库中读取了日期,开始时间和结束时间,现在您希望以从开始时间到(但不能以15分钟为增量)的时间显示时间包括结束时间。
如果是这种情况,下面的代码段可能会有所帮助。对于示例,我对日期进行了硬编码,但逻辑是它使用Enumerable.Range
来获取从0
开始的值列表,其计数为(total minutes between start and end time divided by 15)
,然后为每个值都将开始时间加上[15倍此分钟数]分钟,以选择一个新的日期时间。
因此,对于您的示例,由于总分钟数为60
,然后除以15
为4
,则范围为[0, 1, 2, 3]
,然后将其乘以用15
编号,并将其添加到开始时间,结尾为:start time + 0 = 2:00
,start time + 15 = 2:15
,start time + 30 = 2:30
和start time + 45 = 2:45
。
// Pretend we got these from the database
DateTime date = DateTime.Parse("01/16/2019");
DateTime startTime = DateTime.Parse("2:00 PM");
DateTime endTime = DateTime.Parse("3:00 PM");
// Interview length in minutes
int interviewLength = 15;
// Get a list of 15 minute increments starting at start time
List<DateTime> increments =
Enumerable.Range(0, (int) (endTime - startTime).TotalMinutes / interviewLength)
.Select(minutes => startTime.AddMinutes(minutes * interviewLength))
.ToList();
// Show results to console
Console.WriteLine($"Start times available on {date.ToShortDateString()}:");
increments.ForEach(time => Console.WriteLine($"\t{time.ToShortTimeString()}"));
Console.ReadKey();
输出
如果其中一些代码令人困惑,那么写出来的“老派”方式(可能更容易阅读)将类似于:
for (DateTime time = startTime; time < endTime; time = time.AddMinutes(15))
{
Console.WriteLine(time.ToShortTimeString());
}