2011-07-06 15 views
39

Mam dwie daty. Jedna data jest wprowadzana, a inna to DateTime.Now. Mam je w formacie mm/dd/yyyy, może to być również format m/d/yy. Obie daty są zerowalne, tzn. Typem danych jest DateTime?, ponieważ mogę przekazać wartość null również jako dane wejściowe. Teraz chcę porównać dwie daty tylko z formatem mm/dd/yyyy lub m/d/yy.Jak porównać daty w C#

Odpowiedz

63

Jeśli masz daty w zmiennych DateTime, nie mają one formatu , który ma.

Można użyć właściwości Date, aby zwrócić wartość DateTime z przedziałem czasu ustawionym na północ. Tak więc, jeśli masz:

DateTime dt1 = DateTime.Parse("07/12/2011"); 
DateTime dt2 = DateTime.Now; 

if(dt1.Date > dt2.Date) 
{ 
    //It's a later date 
} 
else 
{ 
    //It's an earlier or equal date 
} 
+9

Lepiej użyj 'DateTime.Today' niż' DateTime.Now.Date', jeśli nie potrzebujesz godzin, minut itd. –

+0

@Piotr - dobry punkt - chyba że potrzebują także dostępu do godzin/minut/sekund jako innej części Praca. –

+1

@Damien_The_Unbeliever Czy to działa dla dowolnego formatu daty? Co na temat "yyyy/MM/dd'? – Arbaaz

7

Po pierwsze, zrozumieć, że DateTime obiekty nie są formatowane. Po prostu zapisują Rok, Miesiąc, Dzień, Godzinę, Minutę, Drugą itd. Jako wartość liczbową, a formatowanie ma miejsce, gdy chcesz w jakiś sposób przedstawić je jako ciąg znaków. Możesz porównywać obiekty bez ich formatowania.

Aby porównać datę wejścia z DateTime.Now, trzeba najpierw przeanalizować wkład w terminie, a następnie porównać tylko porcje rok/miesiąc/dzień:

DateTime inputDate; 
if(!DateTime.TryParse(inputString, out inputDate)) 
    throw new ArgumentException("Input string not in the correct format."); 

if(inputDate.Date == DateTime.Now.Date) { 
    // Same date! 
} 
19

Jeśli masz datę w DateTime zmiennej następnie jego obiekt DateTime i nie zawiera żadnego formatu. Sformatowana data jest wyrażana jako string po wywołaniu metody DateTime.ToString i podaniu w niej formatu.

Powiedzmy, że masz dwa DateTime zmienna, można zastosować metodę porównania dla porównania,

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0); 
DateTime date2 = new DateTime(2009, 8, 2, 0, 0, 0); 
int result = DateTime.Compare(date1, date2); 
string relationship; 

if (result < 0) 
    relationship = "is earlier than"; 
else if (result == 0) 
    relationship = "is the same time as";   
else 
    relationship = "is later than"; 

fragment kodu pochodzi z msdn.