我正在尝试计算某个日期范围内每周有多少天。我的一周是周六-周六。 我有一个开始日期和一个持续时间(和一个周数 - 实际上我想返回整个范围内特定周的天数)
编辑:我会尽量说得更清楚一些。我确实希望下周六之前的日期跨过一个日期范围..所以是的,当它的范围足够长时,第二周将始终是 7 天。然而,如果持续时间不延长到星期六,最后一周将是持续时间的剩余天数.. 希望下面的答案能够提供更多信息.. 也许不会。 周数是日期范围内的周。与一年中的几周无关。 值得注意,arrivalDate 可以是星期六,因此如果星期六开始且持续时间为 7,则需要返回 7...
所以基本上,如果我有话要说
arrivalDate = 29/06/2014 (sunday)
weeknumber = 1
duration = 17
我需要它返回 6
如果周数为 2,则应返回 7
如果周数是 3,则应返回 4
到目前为止,我知道这远非理想 - 期待一点递归可能效果最好,但我的大脑还没有完全发挥作用..
public static int DaysInWeek(DateTime arrivalDate, int weekNumber, int duration)
{
int ret =0;
List<int> arr = new List<int>();
int leftOver = 0;
for (int i = 1; i <= duration; i++)
{
if (arrivalDate.AddDays(i).DayOfWeek == DayOfWeek.Saturday)
{
int x = i;
arr.Add( x - arr.Sum() );
leftOver = duration - arr.Sum();
}
}
if (leftOver < 7 && leftOver > 0) arr.Add( leftOver );
if (arr.Count == 0) ret = duration;
else ret = arr[weekNumber - 1];
return ret;
}
谢谢
最佳答案
这是我基于 CeejeeB 解决方案的解决方案,它将星期六处理为第一天,并将超出持续时间定义的时间跨度的周数处理。
public static int DaysInWeek(DateTime arrivalDate, int weekNumber, int duration)
{
// Handle a Saturday as start day
var daysInFirstWeek = arrivalDate.DayOfWeek == DayOfWeek.Saturday ? 7 : DayOfWeek.Saturday - arrivalDate.DayOfWeek;
// First week
if (weekNumber == 1) return Math.Min(duration, daysInFirstWeek);
// Other week
var start = daysInFirstWeek + ((weekNumber - 2) * 7);
return Math.Max(0, Math.Min(7, duration - start));
}
关于c# - 计算出日期范围内一周中的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21110489/