【问题标题】:Start and End times of the week一周的开始和结束时间
【发布时间】:2016-02-03 04:40:34
【问题描述】:

我有这个字符串表示开始时间(从午夜开始以秒为单位)和从周日到周六的持续时间(以秒为单位)。

0 0 79200 21600 36000 18000 0 0 21600 43200 0 0 0 0

分解

0 0 表示周日没有开始或结束
79200 21600 表示周一晚上 10 点开始,周二凌晨 4 点结束
36000 18000 表示周二上午 10 点开始,周二下午 3 点结束
0 0 表示周三没有开始或结束
21600 43200 表示星期四上午 6 点开始,星期四下午 6 点结束
0 0 表示周五没有开始或结束
0 0 表示周六没有开始或结束

以上代表以下

我如何报告每一天的开始时间和结束时间。考虑到窗口可以跨越午夜。

我现在有这个

int monstart;
TimeSpan monstartint = TimeSpan.FromSeconds(monstart);
int monduration;
int monend = monstart + monduration;

但这显示开始时间正确,但它显示结束为 1.04:00:00

我想要这样的东西

星期一 22:00:00 --> 星期二 04:00:00

【问题讨论】:

  • 有什么理由不能简单地将结果与一天进行比较,如果大于则将一天加一并从时间跨度中减去一?
  • 嗨伊恩,你能告诉我怎么做吗?
  • 感谢@IanMercer。我已经根据您提出的内容构建了一些东西。它运作良好,但我必须每天都这样做。我不确定在哪里发布我所做的事情。我想知道我是否可以构造一个方法(不确定它叫什么),以便我可以从我的主程序中调用它。
  • 如果您对问题有更新,请使用更新编辑问题,可能在新标题“更新”下。如果它开始演变成一个新问题,请将此问题标记为已回答并打开一个新问题。

标签: c# timespan dayofweek


【解决方案1】:

假设您可以使用 string.Splitint.Parse 将您的值放入两个数组:startTimesdurations,每个数组的长度为 7。

for (int day = 0; day < 7; day++)
{
   TimeSpan start = TimeSpan.FromSeconds(startTimes[day]);
   TimeSpan duration = TimeSpan.FromSeconds(durations[day]);
   TimeSpan end = start + duration;
   int endDay = day;

   if (end.TotalHours > 24)
   { 
       end = end - TimeSpan.FromHours(24);
       endDay = (endDay + 1)% 7;
   }

   // Period is from day, start to endDay, end
   // Convert day to (DayName) and output it 

} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多