数据的规则间距取决于数字

Regular spacing of data depending on a number

我正在尝试根据这些的最早日期和最晚日期创建甘特图:

workpackages[0] = new WorkPackage("Package 1", new DateTime(2021, 1, 1), new DateTime(2021, 1, 2));
workpackages[1] = new WorkPackage("Package 2", new DateTime(2021, 2, 2), new DateTime(2021, 3, 3));
workpackages[2] = new WorkPackage("Package 3", new DateTime(2021, 3, 6), new DateTime(2021, 6, 10));
workpackages[3] = new WorkPackage("Package 4", new DateTime(2021, 4, 2), new DateTime(2021, 6, 5));
workpackages[4] = new WorkPackage("Package 5", new DateTime(2021, 3, 2), new DateTime(2021, 4, 5));
workpackages[5] = new WorkPackage("Package 6", new DateTime(2021, 4, 2), new DateTime(2021, 5, 5));
workpackages[6] = new WorkPackage("Package 7", new DateTime(2021, 2, 4), new DateTime(2021, 3, 3));

该程序创建一个数组,该数组与最早日期 (1.1.2021) 和最晚日期 (10.6.2021) 之间的时间跨度一样长,因此为 160 天。现在我可以把所有的日期都放在一起,比如 1.1.2021、2.1.2021、3.1.2021……但我希望用户决定他想要多少抽动。因此,如果他输入 10,他应该得到 12 个日期(也包括开始和结束),并且它们之间的距离是固定的,如果他将 3 作为他想要的抽动次数,他将得到开始日期、结束日期,以及中间的日期这两个。但是我需要为此做些什么计算呢?

顺便说一下,如果您不知道什么是甘特图,this is one。

到目前为止,这是我的方法,但我无法解决问题:

public void ArrayDate(DateTime start, DateTime end, int n)
    {
        double timeSpan;

        timeSpan = (end - start).TotalDays;

        DateTime[] alldates = new DateTime[(int)timeSpan];

        for (int i = 0; i < timeSpan; i++)
        {
            alldates[i] = start.AddDays(i);
        }
    }

您只能使用可以除以结果为完整数字的数字来执行此操作,因此它适用于例如 11。然后每个日期之间有 16 天。这就是你要解决的问题:

double timeSpan;
n = 11;

timeSpan = (end - start).TotalDays;

DateTime[] alldates = new DateTime[n];

int timeStep = (int)timeSpan / (n - 1);

for (int i = 0; i < n; i++)
{
    alldates[i] = start.AddDays(i * timeStep);
}

所以你创建了一个新的变量(timeStep),它有每个日期之间的距离数,只需将 timeSpan 除以我的日期数,那么你仍然需要做 -1,否则你可以' t 除以得到一个完整的数字,-1 是日期之间有多少间隔的确切数量,我给你一点 example for that。正如您在图片中看到的 n = 3 并且执行 -1 它是可分割的,它是日期之间的间隔数。然后你只需要做 AddDays() 和 i * timeStep。这将是 0 * 16 所以在第一次迭代中你得到第一个日期因为它是时间 0,然后在第二次迭代中它将是 1 * 16 即 16,然后是 2 * 16 等等,所以你总是添加16 天乘以 i.