递增DateTime变量

时间:2014-02-19 17:51:00

标签: c# datetime

我正在尝试创建一个循环,其中我的日期在for循环中增加1个月。目前只显示今天的日期。并没有增加。我想将显示日期更改为选定的显示日期而不是今天/默认

for (int i = 1; i <= 15; i++)
{

    DateTime initialdate = InitialDate.DisplayDate;
    InitialDate.DisplayDate.AddMonths(1);
    initialdate = InitialDate.DisplayDate;

}

我没有显示任何使用的初始日期,因为我认为没有必要。

InitialDate是一个DateTimePicker
初始化Datepicker
    <DatePicker x:Name="InitialDate"></DatePicker>

4 个答案:

答案 0 :(得分:9)

问题:您需要指定InitialDate.DisplayDate.AddMonths(1)的返回值。

来自MSDN:DateTime.AddMonths()

  

返回一个新的DateTime,它将指定的月数添加到   这个实例的价值。

替换它:

InitialDate.DisplayDate.AddMonths(1);

有了这个:

InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);

答案 1 :(得分:9)

DateTime.AddMonths不会更改您调用它的值 - 它会返回 new 值。 所有 DateTime方法都是如此。没有什么可以改变价值,这是一个很好的工作,因为它是一个值类型,如果它们是变量的副本(例如由于被属性返回的值调用),变化将会丢失。

你想:

InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);

假设你在循环体的其余部分使用initialdate,如果你只是在增量之后声明它就会更清楚:

for (int i = 1; i <= 15; i++)
{
    InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);
    DateTime initialDate = InitialDate.DisplayDate;
    // Use initialDate here
}

(为了约定,我已将变量重命名为大写D。)

答案 2 :(得分:1)

这样做:

DateTime initialdate = InitialDate.DisplayDate.AddMonth(1);

答案 3 :(得分:0)

你的问题源于这样一个事实:InitialDate.DisplayDate.AddMonths(1);返回一个新的DateTime,而不是修改它被调用的实例。您对该调用发出的返回值不执行任何操作。相反,你想要;

InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);

仅供参考,你会在C#中看到很多。我会说,通常会改变对象值的方法返回一个新实例,而不是改变它们被调用的实例。