如何获得两次之间的持续时间并将其分成几分钟?

时间:2019-01-14 02:01:32

标签: c# sql asp.net sql-server

我有此表格,教师可以在其中输入时间和日期,她可以自由参加面试。在下面的示例中,教师在1月16日的一个小时有空。教师单击关闭后,数据将输入到 sql server表中。

我想做的是从数据库中获取数据并将其显示在学生页面上。但是,拆分后,学生应该可以看到它。这是因为每次面试仅需 15分钟。从分段时间(02:15到02:20等)中,学生可以选择哪个时间是他的首选时间。

我不知道该如何表达这个问题。我知道这可能会令人困惑,但是如果有人理解,请帮助我!

enter image description here

1 个答案:

答案 0 :(得分:0)

  

如何获得两次之间的持续时间并将其分成几分钟?

最简单的答案是:您找到总分钟数,然后将其除以某个段中的分钟数(采访时长)。


如果我对您的理解正确,那么您已经从数据库中读取了日期,开始时间和结束时间,现在您希望以从开始时间到(但不能以15分钟为增量)的时间显示时间包括结束时间。

如果是这种情况,下面的代码段可能会有所帮助。对于示例,我对日期进行了硬编码,但逻辑是它使用Enumerable.Range来获取从0开始的值列表,其计数为(total minutes between start and end time divided by 15),然后为每个值都将开始时间加上[15倍此分钟数]分钟,以选择一个新的日期时间。

因此,对于您的示例,由于总分钟数为60,然后除以154,则范围为[0, 1, 2, 3],然后将其乘以用15编号,并将其添加到开始时间,结尾为:start time + 0 = 2:00start time + 15 = 2:15start time + 30 = 2:30start 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();

输出

![enter image description here

如果其中一些代码令人困惑,那么写出来的“老派”方式(可能更容易阅读)将类似于:

for (DateTime time = startTime; time < endTime; time = time.AddMinutes(15))
{
    Console.WriteLine(time.ToShortTimeString());
}