c# - 计算出日期范围内一周中的天数

标签 c# recursion

我正在尝试计算某个日期范围内每周有多少天。我的一周是周六-周六。 我有一个开始日期和一个持续时间(和一个周数 - 实际上我想返回整个范围内特定周的天数)

编辑:我会尽量说得更清楚一些。我确实希望下周六之前的日期跨过一个日期范围..所以是的,当它的范围足够长时,第二周将始终是 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/

相关文章:

c# - .NET 4.8 中的异步等待递归导致 StackoverflowException(不在 .Net Core 3.1 中!)

delphi - 具有接口(interface)的递归函数的访问冲突

python - 为什么单独附加一个列表会创建一个无限列表

c# - Windows Mobile - Compact Framework 程序即服务?

c# - 无法使用 [FromQuery] ASP Net Core 2 API 绑定(bind)参数

c# - “Error HRESULT E_FAIL has been returned from a call to a COM component” 窗体 c#

java - 递归,每一步导出信息

c# - 所有枚举项到字符串 (C#)

c# - EntityFramework 6 RC1 包含在多对多属性上失败

SQL 递归与 row_numbers