2013-03-12 13 views
32

Chcę dodać dni w określonym terminie. Mam kod taki jak ten:Datetime w C# dodaj dni

DateTime endDate = Convert.ToDateTime(this.txtStartDate.Text); 
Int64 addedDays = Convert.ToInt64(txtDaysSupp.Text); 
endDate.AddDays(addedDays); 
DateTime end = endDate; 
this.txtEndDate.Text = end.ToShortDateString(); 

Ale ten kod nie działa, dni nie są dodawane! Co za głupi błąd robię?

+0

co nie działa? –

+1

Widzę cztery dokładnie takie same odpowiedzi. Tylko dlaczego ... –

Odpowiedz

63

DateTime jest niezmienny. Oznacza to, że nie można zmienić jego stanu i trzeba przypisać wynik operacji do zmiennej.

endDate = endDate.AddDays(addedDays); 
+0

Ten dowolny typ wartości jest domyślnie niezmienny, nic więcej. – Freeman

+0

@Freeman, tak to jest typ wartości i jest niezmienny – Habib

+0

@Freeman, masz rację, zobacz tę dyskusję również http://stackoverflow.com/questions/868411/are-value- typeses-immutable-by-definition – Habib

11

Musisz złapać wartość zwracaną.

Metoda zwraca obiekt, którego wartość jest sumą daty i godziny wystąpienia i wartości dodanej

endDate = endDate.AddDays(addedDays); 
8

Jego ponieważ metoda AddDays() zwraca nowy DateTime, że nie są przypisywanie lub przy użyciu dowolnego miejsca.

Przykład zastosowania:

DateTime newDate = endDate.AddDays(2); 
2

Dlaczego używacie Int64? AddDays wymaga dodania wartości o wartości double. Następnie musisz użyć wartości zwracanej AddDays. Zobacz here.

+0

ta metoda wymaga długiej zmiennej typu! –

+0

@NomiAli Nie, nie ma! Spójrz na podany przeze mnie link ... –

5

przypisać do jakiejś zmiennej ENDDATE data ponieważ AddDays metoda zwraca nowy DateTime w wyniku ..

Datetime somedate=endDate.AddDays(2); 
0

użyj:

 DateTime dateTime = new DateTime(); 
    dateTime = DateTime.Now; 
    DateTime newDateTime = new DateTime(); 
    TimeSpan NumberOfDays = new TimeSpan(2, 0, 0, 0, 0); 
    newDateTime = dateTime.Add(NumberOfDays);