2012-02-07 53 views
1

我做錯了嗎?C#日期操作

   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。
請幫忙!

回答

13

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(); 

雖然我使用-運營商,並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(); 

或者更好的是,使用AddDays

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(); 

甚至更​​好,但使用Noda Time :)

LocalDate date = new LocalDate(year, month, day); 
string test1 = previousDay.ToString(); 
date = date.PlusDays(-1); 
string test2 = previousDay.ToString(); 
date = date.PlusDays(-1); 
string test3 = previousDay.ToString(); 

或者:

LocalDate date = new LocalDate(year, month, day); 
string test1 = previousDay.ToString(); 
date = date + Period.FromDays(-1); 
string test2 = previousDay.ToString(); 
date = date + Period.FromDays(-1); 
string test3 = previousDay.ToString(); 
+0

嗯,我說,這是可能明顯對大多數人來說!感謝這樣一個完整的答案! – CompanyDroneFromSector7G 2012-02-07 11:30:47

+0

@bukko請將上面的帖子設置爲「答案」 – fizzbuzz 2012-02-07 11:36:42

+0

@hotadvice我試過 - 有一段時間延遲。有耐心! – CompanyDroneFromSector7G 2012-02-07 11:48:06

1

DateTime是不變的,這意味着每次調用SubtractAddDays實際上與返回值的新實例。 previousDay永遠不會改變。

2

:)這將返回一個新的datetime,但並沒有改變主叫對象值

previousDay.AddDays(-1); 
+0

我們再次遭到懷疑。團結! Stack的弱者,讓我們冷靜下來! – 2012-02-07 11:56:48

1

嘗試:(如日期時間像串類是不可變的)

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

1

修改這一行:

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

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

OR

,如果你不想改變一個變量

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

問題是你實際上並沒有改變previousDay的價值。

您需要實際分配新值:

previousDay = previousDay.AddDays(-1); 
1

你只是減去日期時間變量的新的時間跨度,但不分配結果的日期時間變量。所以,這些更改不會影響日期時間變量。所以,最好這樣做。

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();