gpt4 book ai didi

c# - 无法弄清楚计算时间表以在日历上显示日期的例程 - 算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:07 24 4
gpt4 key购买 nike

我正在做一个日历页面来显示轮类工作的白天、晚上和休息日。

时间表是这样的:休息 7 天,休息 4 晚,休息 3 天,休息 1 天,休息 3 晚,休息 3 天,休息 4 天,然后 28 天的循环重新开始。周期总是从星期五开始。

有 4 个不同的团队:每个团队相继开始一周。

所以我有一个 sql 表,其中只有第一个船员 7 休的第一个 28 天周期的月、日和年,我将其吸入一个集合并添加字段来计算其他船员的 7 休开始.

日历有不同的颜色来显示您是休息日、晚上还是白天。所以我浏览了这个列表,并使用周期的第一天作为索引到一个数组中:

static int[] DaysArray = new int[28] {0,0,0,0,0,0,0,2,2,2,2,0,0,0,1,1,1,0,2,2,2,0,0,0,1,1,1,1}; // 0 - day off, 1 - days, 2 - nights

我感兴趣的是确定月初是 28 天周期中的哪一点,我只是在其余的日子里用适当的颜色涂上颜色。这是我正在努力解决的例程:

protected int GetDayNightOff(int day)
{
day--;
day -= 28;
day = Math.Abs(day);
day--;
return DaysArray[day];
}

如果循环的第一天是 1 号,那么我想用索引 0 显示起始颜色;第二个:索引 27;第三:索引 26 等等。我知道有一个简单的解决方案,但我似乎无法理解它。

希望有人能提供帮助,我们将不胜感激。

最佳答案

我建议您使用 DateTimeenum 而不是神奇的 int。代码会更容易阅读,因为日期实际上是 pretty hard to get right , 最好使用库而不是自己做。然后你可以从周期开始日减去你的目标日并得到 Days TimeSpan 的属性。

static Working[] DaysArray = { Working.Off, Working.Off, Working.Off, Working.Off, Working.Off, Working.Off, Working.Off, Working.Nights, Working.Nights, Working.Nights, Working.Nights, Working.Off, Working.Off, Working.Off, Working.Days, Working.Days, Working.Days, Working.Off, Working.Nights, Working.Nights, Working.Nights, Working.Off, Working.Off, Working.Off, Working.Days, Working.Days, Working.Days, Working.Days };
public enum Working
{
Off,
Days,
Nights,
}
public Working GetDayNightOff(DateTime cycleStart, DateTime day)
{
var days = (day - cycleStart).Days;
days %= DaysArray.Length;
if (days < 0)
days += DaysArray.Length;
return DaysArray[days];
}

days 的计算允许 day 远离 cycleStart

关于c# - 无法弄清楚计算时间表以在日历上显示日期的例程 - 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19791943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com