如何计算C#中两个日期之间的天数减去星期日?

she*_*tal 9 c#

我正在创建一个图书馆管理系统.

我已经使用时间戳来计算日期差异,并且在日期差异的帮助下,我也在计算罚款.

现在,此日期差异包括一周中的所有日期.但是对于图书馆应用程序,罚款只需在周内收取6天(周一至周六).

我无法做到这一点.

任何人都可以帮我完成这项任务吗?

提前致谢!!

Pau*_*ier 17

从本质上讲,您可以计算原始天数; 你需要找到从这个数字中减去的星期日数.您知道每7天是一个星期日,因此您可以将原始天数除以7,并从原始天数中减去该数字.现在你需要删除本周余下的星期日数量; 一个 MOD原料的天数会告诉你剩余的日子.要确定该跨度是否包含星期日,您必须知道第一天的星期几; 如果你定义星期一是0,星期二是1,星期三是3等,那么如果你把跨度开始的星期几的值加到原始数的mod(7)天数,如果数字是6或更高,你已经跨越了一个额外的星期日,并且应该从您的罚款号码中删除1天.

在伪代码中:

int fine;
int numdays =  endDay - startDay;

fine = numdays - (numdays / 7);

int dayOfWeek = startDate.DayOfWeek;
if (dayOfWeek + (numdays % 7) > 6)
{
   fine = fine - 1;
}
Run Code Online (Sandbox Code Playgroud)


rav*_*ven 8

这样做:

private int DaysLate(DateTime dueDate, DateTime returnDate)
{
    var ts = returnDate - dueDate;
    int dayCount = 0;

    for (int i = 1; i <= ts.Days; i++)
    {
        if (dueDate.AddDays(i).DayOfWeek != DayOfWeek.Sunday)
            dayCount++;
    }

    return dayCount;
}
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案是O(n).O(1)溶液是优选的. (7认同)
  • 到目前为止最佳答案.但是:一般来说,使用"DateTime.Now"是一种"嗅觉".例如,你如何对它进行单元测试?可能是单位测试的结果在星期一和星期二不同.那么,最好添加一个参数,例如"DateTime returnedDate"并从中减去dueDate.其次,要非常警惕DateTime.Now.它计算当前的日期和时间,考虑时区.在夏令时变化的时候,每年可能发生两次奇怪的事情. (2认同)