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分钟。在这种情况下,时间间隔需要为: 08:00 09:30 11:00 12:30 14:00 15:30 17:00 第一节课08:00开始,耗时1小时,然后休息0:30分钟,下一节课09:30开始。我怎样才能做到这一点?下面是我的代码: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分钟。在这种情况下
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循环。它像我预料的那样工作