需要将日期添加到日期,但从日历中排除某些天数

时间:2011-07-28 09:39:42

标签: c# visual-studio-2010 datetime date datetimepicker

使用C#在Visual Studio中工作。我正在为一个抓住诉讼的小型办公室制作软件。一旦诉讼被捕,该办公室有15天的时间将一些文件发送给仲裁庭。所以deadLine在15天内。

但是如果有例如,并且更新(update1)诉讼,办公室现在有一个新的deadLine来发送update1文件。

因此,Capture的deadLine是dd / MM / yyy 然后,update1的deadLine是dd / MM / yyyy

但我需要排除所有非劳动日,因此deadLines不会显示任何非劳动日。例如:

捕获:15天 更新1:5天 Update2:10天 Update3:7天

因此,如果我今天,2011年7月28日捕获,应该将15天添加到deadLine变量,即8月12日,但我必须从日历中排除非工作日。例如2011年8月12日。

我已将DatePicker值转换为字符串,格式为(dd / MM / yyyy),我将其与无效日期字符串列表进行比较,格式为(dd / MM / yyyy)。

如果deadLine落在其中一天,我将deadLine转换为dateTime,添加1天,直到它不会落在其中一天。然后将最终的dateTime值保存为新的deadLine。

示例:

string DeadLine;
string NonValidDay001 = 12/08/2011;
string NonValidDay001 = 15/08/2011;
string NonValidDay001 = 19/08/2011;

DeadLine = DatePicker01.Value.AddDays(15).ToString("dd/MM/yyyy");

while (DeadLine == NonValidDay001 | DeadLine == NonValidDay001 | DeadLine == NonValidDay001)
{
    dateTime dt = Convert.toDateTime(DeadLine);
    dt.AddDays(1).ToString("dd/MM/yyyy");
    DeadLine = dt;
}

我遇到的问题是,如果截止日期与无效天数匹配,则不会在交易中添加天数。

我正在做的事情不是以任何方式运作。

请有人赐教。 (=

3 个答案:

答案 0 :(得分:4)

您需要更改以下内容......

dt.AddDays(1).ToString("dd/MM/yyyy");
DeadLine = dt;

为...

DeadLine = dt.AddDays(1).ToString("dd/MM/yyyy");

“方法AddDays不会更改DateTime的值。而是返回一个新的DateTime,其值是AddDays操作的结果。”

有关从特定日期添加工作日的功能的详细信息,请参阅以下内容...

C#: Adding working days from a cetain date

答案 1 :(得分:0)

该行

dt.AddDays(1).ToString("dd/MM/yyyy");

没有任何成就。 DateTime是不可变的。所有这一行都是创建一个永远不会被引用的新DateTime和新String。我想你的意思是:

DeadLine = dt.AddDays(1).ToString("dd/MM/yyyy");

但是,您使用String而不仅仅是DateTime s似乎有点奇怪。

答案 2 :(得分:0)

如果您想在这段时间内(即在15天内)跳过劳动时间,那么您可以使用以下内容(未经测试,直接输入此处):

public DateTime AddDaysExcluding(DateTime startDate, int days, params DateTime[] excludedDays)
{
    while(days != 0)
    {
        if (excludedDays.Contains(startDate))
            startDate = startDate.AddDays(1);

        startDate = startDate.AddDays(1);
        days--;
    }

    if (excludedDays.Contains(startDate))
        startDate = startDate.AddDays(1);
}

使用示例:

DateTime deadline = AddDaysExcluding(DatePicker01.Value, 15,
    new DateTime(2011, 8, 12), new DateTime(2011, 8, 15), new DateTime(2011, 8, 19));