C#日期操纵

C#日期操纵,c#,datetime,C#,Datetime,我做错了吗 DateTime previousDay = new DateTime(year, month, day); string test1 = previousDay.ToString(); previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); string test2 = previousDay.ToString();

我做错了吗

                DateTime previousDay = new DateTime(year, month, day);
                string test1 = previousDay.ToString();
                previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
                string test2 = previousDay.ToString();
                previousDay.AddDays(-1);
                string test3 = previousDay.ToString();
由于某些可能对大多数人来说显而易见的原因,日期不会从test1更改为test3。

救命啊

DateTime
是不可变的-当您调用
Subtract
时,它不会更改调用的目标,而是返回一个新值:

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test3 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
虽然我会使用
-
操作符和
TimeSpan.FromDays

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test2 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test3 = previousDay.ToString();
DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test2 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test3 = previousDay.ToString();
或者更好地使用
AddDays

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test2 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test3 = previousDay.ToString();
DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test2 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test3 = previousDay.ToString();
或者更好的是,使用:)

或:


DateTime
是不可变的-当调用
Subtract
时,它不会更改调用的目标,而是返回一个新值:

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test3 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
虽然我会使用
-
操作符和
TimeSpan.FromDays

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test2 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test3 = previousDay.ToString();
DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test2 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test3 = previousDay.ToString();
或者更好地使用
AddDays

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test2 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test3 = previousDay.ToString();
DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test2 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test3 = previousDay.ToString();
或者更好的是,使用:)

或:


DateTime
是不可变的,这意味着对
Subtract
AddDays
的每次调用实际上都会返回一个带有值的新实例
previousDay
永远不会更改。

DateTime
是不可变的,这意味着每次调用
Subtract
AddDays
实际上都会返回一个带值的新实例<代码>前一天将永远不会更改。

:)这将返回一个新的日期时间,但不会更改调用者对象值

previousDay.AddDays(-1);
:)这将返回新的日期时间,但不会更改调用方对象值

previousDay.AddDays(-1);
Try:(因为类似DateTime的字符串类是不可变的)

等等。

试试:(因为类似日期时间的字符串类是不可变的)


等等。

用新值减去返回时间跨度。您继续使用旧值

更多信息:
用新值减去返回时间间隔。您继续使用旧值

更多信息: 修改此行:

previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); 
作为

如果不想更改上一个变量

DateTime updatedPreviousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); 
修改此行:

previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); 
作为

如果不想更改上一个变量

DateTime updatedPreviousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); 

问题是您实际上没有更改前一天的值

您需要实际分配新值:

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test3 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);

问题是您实际上没有更改前一天的值

您需要实际分配新值:

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test3 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);

您只需从datetime变量中减去新的timespan,而不是将结果赋给datetime变量。因此,这些更改不会影响datetime变量。所以,最好这样做

previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();

or

string test2 = (previousDay.Subtract(new TimeSpan(1, 0, 0, 0))).ToString();

您只需从datetime变量中减去新的timespan,而不是将结果赋给datetime变量。因此,这些更改不会影响datetime变量。所以,最好这样做

previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();

or

string test2 = (previousDay.Subtract(new TimeSpan(1, 0, 0, 0))).ToString();

嗯,我说这对大多数人来说可能是显而易见的!谢谢你这么完整的回答@bukko请将上面的帖子设置为“答案”,嗯,我说这对大多数人来说可能是显而易见的!谢谢你这么完整的回答@bukko请把上面的帖子设为“回答”,我们又被抓了。团结这群弱者,让我们投票击败他吧!我们又被抓了。团结这群弱者,让我们投票击败他吧!