Odejmowanie dat w C#

0

Witam,

mam problem z odejmowaniem dat w C#. Otóż potrzebuje od siebie odjąć datę dziejszą, tzn np 23 lipca 2010 i datę podaną prze użytkownika np datePODANA_DATA.Text = 19 lipca 2010. Próby podjąłem z DateTime.Now, DateTime.Today, później próbowałem TimeSpan. Proszę o pomoc, jak to zrobić?

1

Normalnie, odejmując.

DateTime t = DateTime.Now;
DateTime d = new DateTime(2000, 1, 1);

TimeSpan res = d - t;

Może myli cię to że wynikiem odejmowania dwóch dat nie jest kolejna data tylko timeSpan reprezentujący "odstęp" czasowy. (mimo wszystko to raczej logiczne - czemu rok 2000 - rok 1500 ma właściwie dawać rok 500? A gdyby zacząć liczenie czasu o 100 lat wcześniej to wynik byłby inny?)

0

A zatem zrobiłem to w ten sposób:

DateTime DATAZAWARCIA = DateTime.Parse(dateDATAZAWARCIA.Text);
DateTime now = DateTime.Now;
TimeSpan x = now - DATAZAWARCIA;

Ale pojawia się błąd w:

DateTime DATAZAWARCIA = DateTime.Parse(dateDATAZAWARCIA.Text);

Ciąg nie został rozpoznany jako prawidłowy element DateTime.

Jak mogę to obejść? Dodam tylko, że obiekt dateDATAZAWARCIA wygląda tak:

[URL=http://img685.imageshack.us/i/beztytuudca.jpg/][IMG]http://img685.imageshack.us/img685/6844/beztytuudca.th.jpg[/IMG][/URL]

0

Sorry, za zdjęcie, złe hiperłącze :/

http://img685.imageshack.us/img685/6844/beztytuudca.jpg

0

Spróbuj:

TimeSpan x = now - DATAZAWARCIA.Value;

Pozdrawiam.

1

Dzieje się tak gdyż wartość w twoim textboxie nie jest dla metody Parse() poprawną datą.

Można to obejść na trzy sposoby

  • zmienić jeden textbox na trzy kontrolki (dzień, miesiąc, rok - dra numericUpDowny i jeden combobox) [nawet niezłe rozwiązanie, chyba że z jakiś względów data powinna być tekstem w textboxie]

  • ręcznie parsować wartość textboxa do daty (np. podzielić wyrazy w textboxie, pierwszy i trzeci sparsować do int - dzień, drugiego załatwić switchem) [odradzam... łatwo się pomylić i trudno później modyfikować/czytać taki kod. Zaletą jest względna prostota]

-użycie jednej (a konkretnie drugiej) z przeciążonych metod Parse() - http://msdn.microsoft.com/en-us/library/6fw7727c.aspx - będziesz musiał napisać obiekt implementujący IFormatProvider a później przekazać go metodzie [ładne rozwiązanie i proste do modyfikacji, aczkolwiek wymaga nowej klasy]

0

MSM: ale tu nie ma TextBoxa, jest tylko ten kalendarz, który datę trzyma we właściwości Value. Nie ma co tu kombinować :) Zatem poprawną odpowiedź dał ozi88.

1

Chyba muszę kupić mocniejsze okulary :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.