[英]Auto-detect the start date and end date to store the day of the week, start time and end time in the day block
我在自动检测开始日期和结束日期以将星期几、开始时间和结束时间存储在DayBlock
对象中时遇到问题。 为什么我需要自动检测? 因为startDate
和endDate
是由用户选择的。 将来,它们不能被硬编码。 我只知道如下硬编码方式:
//startDate = 22 Nov 2022 05:00 PM
//endDate = 25 Nov 2022 12:00 PM
class DayBlock
{
public DayOfWeek DayOfWeek { get; set; }
public TimeSpan Start { get; set; }
public TimeSpan End { get; set; }
}
DayBlock[] blockWeekdays = {
new DayBlock {DayOfWeek=DayOfWeek.Tuesday, Start=TimeSpan.FromHours(17), End=TimeSpan.FromHours(24)},
new DayBlock {DayOfWeek=DayOfWeek.Wednesday, Start=TimeSpan.FromHours(0), End=TimeSpan.FromHours(24)},
new DayBlock {DayOfWeek=DayOfWeek.Thursday, Start=TimeSpan.FromHours(0), End=TimeSpan.FromHours(24)},
new DayBlock {DayOfWeek=DayOfWeek.Friday, Start=TimeSpan.FromHours(0), End=TimeSpan.FromHours(12)},
};
以及如何在DayBlock
的时间跨度中包含小时和分钟,因为目前只能在时间跨度中添加小时,如果开始时间或结束时间包含分钟,我如何在 DayBlock 中添加它们?
我尝试了下面的代码,但它不起作用:
//startDate = 22 Nov 2022 05:30 PM
//endDate = 25 Nov 2022 1:15 PM
class DayBlock
{
public DayOfWeek DayOfWeek { get; set; }
public TimeSpan Start { get; set; }
public TimeSpan End { get; set; }
}
DayBlock[] blockWeekdays = {
new DayBlock {DayOfWeek=DayOfWeek.Tuesday, Start=TimeSpan.FromHours(17:30), End=TimeSpan.FromHours(24)},
new DayBlock {DayOfWeek=DayOfWeek.Wednesday, Start=TimeSpan.FromHours(0), End=TimeSpan.FromHours(24)},
new DayBlock {DayOfWeek=DayOfWeek.Thursday, Start=TimeSpan.FromHours(0), End=TimeSpan.FromHours(24)},
new DayBlock {DayOfWeek=DayOfWeek.Friday, Start=TimeSpan.FromHours(0), End=TimeSpan.FromHours(13:15)},
};
我希望有人能帮我解决问题。
您可以使用循环来迭代startDate
和endDate
之间的日期,为每个日期创建一个DayBlock
object。 这是一个例子:
DateTime startDate = new DateTime(2022, 11, 22, 17, 30, 0);
DateTime endDate = new DateTime(2022, 11, 25, 13, 15, 0);
if (endDate < startDate)
throw new Exception("Bad input");
int days = (int)Math.Ceiling((endDate - startDate).TotalDays);
var blockWeekdays = new DayBlock[days];
for (int i = 0; i < days; i++)
{
blockWeekdays[i] =
new DayBlock
{
DayOfWeek = startDate.AddDays(i).DayOfWeek,
Start = (i == 0 ? startDate.TimeOfDay : TimeSpan.Zero),
End = (i == days - 1 ? endDate.TimeOfDay : TimeSpan.FromHours(24))
};
}
这还将包括 DateTime 的确切时间(即小时、分钟、秒、毫秒等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.