繁体   English   中英

自动检测开始日期和结束日期以将星期几、开始时间和结束时间存储在天块中

[英]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对象中时遇到问题。 为什么我需要自动检测? 因为startDateendDate是由用户选择的。 将来,它们不能被硬编码。 我只知道如下硬编码方式:

//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)},
};

我希望有人能帮我解决问题。

您可以使用循环来迭代startDateendDate之间的日期,为每个日期创建一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM