2012-05-28 20 views
13

Mam ten sam rezultat 1338161400 kiedy robięDlaczego DateTime.AddHours nie działa?

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

jak i kiedy używać 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()); 

próbuję uzyskać 1338168600 jak http://www.mbari.org/staff/rich/utccalc.htm

Aktualizacji :

Dzięki zmieniłem na

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

Ale mam jeszcze nie 1338147000 1338168600

Odpowiedz

49

Terminy są niezmienne obiekty, to znaczy, że nie mogą być zmienione po utworzeniu. DateTime.AddHours zwraca nową instancję DateTime przesuniętą w tył o 4 godziny, ale "date" nie zostanie zmodyfikowana.

Zastosowanie:

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

+1 za niezmienne wywołanie. –

+0

Właściwa odpowiedź Muszę poczekać 6 minut, zanim sprawdzi się jako dobra odpowiedź z powodu reguły stackoverflow. Ale zaktualizowałem mój post również czy możesz go przeczytać dzięki? – user310291

+0

Wreszcie nevermind Po prostu muszę dodać +2 zamiast :) – user310291

7

AddHours zwraca nowyDateTime przedmiot, który jest wynikiem dodawania godziny na oryginale. Oryginał pozostaje niezmieniony.

zatem chcesz date = date.AddHours(-4); zamiast tylko date.AddHours(-4);

4

AddHours prostu zwraca nową datę zwiększany, użyj tego:

date = date.AddHours(-4); 
2

AddHours zwraca nowy obiekt DateTime. to zrobić:

date = date.AddHours(-4); 

Dokumentacja: link

5

Pierwotna data jest ustawiona 4 godziny do tyłu ale nie ustawić ją na nową datą. spróbuj to zamiast:

date = date.AddHours(-4); 
2

DateTime nie jest niezmienna. Po prostu metody DateTime nie zmieniają struktury, ale zwracają nową.

Jeśli to zrobić:

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

Wtedy d1 struct zostaną zastąpione wartościami D2.

Nie wiem, czy możliwe jest posiadanie niezmiennych struktur.