2012-05-28 260 views
13

我有同樣的結果1338161400當我做爲什麼DateTime.AddHours似乎不起作用?

DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    DateTime date = DateTime.Parse(@"28/05/12 01:30"); 
    TimeSpan diff = date.ToUniversalTime() - origin; 
    Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString()); 

以及當我用date.AddHours(-4):

DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    DateTime date = DateTime.Parse(@"28/05/12 01:30"); 
    date.AddHours(-4); 
    TimeSpan diff = date.ToUniversalTime() - origin; 
    Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString()); 

我試圖讓1338168600像http://www.mbari.org/staff/rich/utccalc.htm

更新:

謝謝我改爲

DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    DateTime date = DateTime.Parse(@"28/05/2012 01:30"); 
    date = date.AddHours(-4); 
    date = date.ToUniversalTime(); 
    TimeSpan diff = date - origin; 
    Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString()); 

不過我1338147000仍不1338168600

回答

49

日期是不可變對象,即它們在創建之後進行修改。 DateTime.AddHours返回一個新的DateTime實例,它向後移動了4個小時,但「date」不會被修改。

用途:

DateTime newDate = date.AddHours(-4); 
+6

+1爲不可變的呼叫。 –

+0

正確的答案我必須等待6分鐘,然後再根據計算器規則檢查它爲好的答案。但是我已經更新了我的帖子,你能否看一下謝謝? – user310291

+0

終於不知道我只需要添加+2代替:) – user310291

7

AddHours返回DateTime對象,它是添加到時間原來的結果。原文保持不變。

因此,你要date = date.AddHours(-4);,而不是僅僅date.AddHours(-4);

4

AddHours簡單地返回新增加的日期,使用此:

date = date.AddHours(-4); 
2

AddHours返回新的DateTime對象。做到這一點:

date = date.AddHours(-4); 

文檔:link

5

原來的日期設置4小時落後,但你並沒有將其設置爲新的日期。試試這個:

date = date.AddHours(-4); 
2

DateTime不是不可變的。只是DateTime方法不會更改結構,而是返回一個新結構。

如果你這樣做:

DateTime d1 = DateTime.Now; 
DateTime d2 = DateTime.Now; 
d1 = d2; 

然後,結構D1將與D2的值覆蓋。

我不知道是否有可能有一個不可變的結構。