C# 如何计算有间隙的时段?

C# 如何计算有间隙的时段?,c#,C#,我正在开发小型预约应用程序,我需要实现一种基于用户输入计算工作时间的方法。当startWorkingHours=8和endWorkingHours=18时,我得到了正确的时间段示例 时段为: [ "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00" ] 如果我添加约会的持续时间和约会之间的间隔,我如何实现时间间隔。例如,预约时间为1小时,会话间隔为0:30分钟。在这种情况下

我正在开发小型预约应用程序,我需要实现一种基于用户输入计算工作时间的方法。当startWorkingHours=8和endWorkingHours=18时,我得到了正确的时间段示例

时段为: [ "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00" ]

如果我添加约会的持续时间和约会之间的间隔,我如何实现时间间隔。例如,预约时间为1小时,会话间隔为0:30分钟。在这种情况下,时间间隔需要为: 08:00 09:30 11:00 12:30 14:00 15:30 17:00

第一节课08:00开始,耗时1小时,然后休息0:30分钟,下一节课09:30开始。我怎样才能做到这一点?下面是我的代码:

public async Task<IEnumerable<string>> CalculateTimeSlots(int startWorkingHours, int endWorkingHours, int durationOfSession, int gapBetweenSessions)
{
    try
    {
        var availableTimeSlots = new List<string>();

        var startDay = DateTime.Today.AddHours(startWorkingHours);
        var endDay = DateTime.Today.AddHours(endWorkingHours);

        var ts = endDay - startDay;
        var hoursBetween = Enumerable.Range(0, (int)ts.TotalHours)
                                     .Select(i => startDay.AddHours(i));

        foreach (var hour in hoursBetween)
        {               
            availableTimeSlots.Add(hour.ToString("t"));
        }

        return await Task.FromResult<IEnumerable<string>>(availableTimeSlots) ;
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Calculate working hours service exception: ");
        throw;
    }
}
public async Task CalculateTimeSlot(int startWorkingHours、int endWorkingHours、int Durationof Session、int Gap Between Sessions)
{
尝试
{
var availableTimeSlots=新列表();
var startDay=DateTime.Today.AddHours(startWorkingHours);
var endDay=DateTime.Today.AddHours(endWorkingHours);
var ts=结束日-开始日;
var hoursBetween=可枚举范围(0,(int)ts.TotalHours)
.选择(i=>startDay.AddHours(i));
foreach(以小时为单位的var小时)
{               
添加(小时到字符串(“t”));
}
返回等待任务.FromResult(AvailableTimeSlot);
}
捕获(例外情况除外)
{
_logger.LogError(例如,“计算工作时间服务异常:”);
投掷;
}
}

您可以使用具有特定步长(如60分钟+30分钟)的简单
for()
循环来迭代所有可能的约会时段:

int durationOfSession = 60;
int gapBetweenSessions = 30;
DateTime start = DateTime.Today.AddHours(8);
DateTime end = DateTime.Today.AddHours(18);

for (DateTime appointment = start; appointment < end; appointment = appointment.AddMinutes(durationOfSession + gapBetweenSessions)) {
    Console.WriteLine(appointment.ToString("HH:mm"));
}

您可以使用具有特定步长(如60分钟+30分钟)的简单
for()
循环来迭代所有可能的约会时段:

int durationOfSession = 60;
int gapBetweenSessions = 30;
DateTime start = DateTime.Today.AddHours(8);
DateTime end = DateTime.Today.AddHours(18);

for (DateTime appointment = start; appointment < end; appointment = appointment.AddMinutes(durationOfSession + gapBetweenSessions)) {
    Console.WriteLine(appointment.ToString("HH:mm"));
}

使用
AddHours(1.5)有什么问题?是的,但我必须始终跳过数组中的第一个元素。我认为这不是一个可靠的解决方案。使用
AddHours(1.5)有什么问题?是的,但我必须始终跳过数组中的第一个元素。我认为这不是可靠的解决方案。谢谢@Progman。我忘记了循环。它按我预期的那样工作Hanks@Progman..我忘记了for循环。它像我预料的那样工作