2010-04-26 13 views
12

Ho due campi:C'è un modo per confrontare la data "stringhe" in C# senza convertire le stringhe?

string date1 = "04/26/10"; 
string date2 = "04/25/10"; 

Come posso confrontare questi due campi, come in modo ?:

if (date2 <= date1) 
{ 
    // perform some code here 
} 

questo può essere fatto senza prima convertire i campi a una variabile data di tipo separata?

EDIT: Devo dire che questi valori sono provenienti da una tabella del database in cui i valori di data sono in un formato di stringa per cominciare. Vecchio codice precedente ...

risposta

33

No, ma non è difficile convertire in una data in C#.

if (DateTime.Parse(date2) <= DateTime.Parse(date1)) 

{ 
    // perform some code here 
} 
+0

Sì, sembra abbastanza semplice. Stavo pensando che avrei dovuto avere variabili separate con i valori di data convertiti in esse, ma il modo in cui hai mostrato mi permette di aggirare queste variabili extra. Grazie! – Kevin

+1

@Kevin, fai solo attenzione alle impostazioni della tua cultura: se stai convertendo una data americana usando una cultura diversa (di default o per sbaglio) potresti finire con risultati inaspettati :) – RYFN

+0

Grazie per l'heads-up, Zeus .Il programma è solo un piccolo programma batch che verrà eseguito ogni tanto sul nostro server. In pratica legge una tabella di database, confronta due campi stringa (i campi contengono date simili a quelli della mia domanda) e aggiorna un altro campo sullo stesso record in base al confronto. Il programma non verrà mai eseguito in nessun luogo al di fuori del Paese o su un server con impostazioni cultura non impostate su "Americano". – Kevin

4

Per lo meno è necessario separare le stringhe al fine di confrontarle nell'ordine corretto.

Se si vuole lasciare loro come stringhe, allora avete bisogno di riordinarli con LARGEST-> più piccole unità, quindi questo:

yyyy/mm/dd 

possono essere confrontati direttamente, ma non il formato che avete. Con il tuo formato, devi dividerlo e ricombinarlo come sopra o confrontare i singoli pezzi nell'ordine corretto.

Detto questo, è piuttosto facile per convertire le stringhe di DateTime utilizzando DateTime.ParseExact.

2

Generalmente è una cattiva idea confrontare data come stringhe.

Ma se le stringhe sono nello stesso formato (ad esempio yyyy/mm/dd significa anni, poi mesi e poi giorni), il confronto potrebbe essere valido.

1

potrebbe essere fatto con la manipolazione delle stringhe, ma sarebbe sceso per il confronto in modo efficace tre serie di numeri interi che come stringhe sarebbe indurre più in alto di quanto la conversione in datetimes. Perché vorresti farlo?

1

No. Lascia che l'infrastruttura .net lo decida per te. Identificherà correttamente le impostazioni e il formato della data dell'utente (utilizzando le impostazioni di sistema, il thread corrente) e determinerà quale è il mese, l'anno e il giorno, specialmente se tali dati provengono ad esempio da un server sql.

13

Se le date sono in realtà memorizzati come stringhe in database, sembra che non si può essere sicuro che sarà in un formato valido prima di parsing. Per questo motivo suggerirei una piccola variazione sulla risposta di jle:

DateTime d1, d2; 
if (DateTime.TryParse(date1, out d1) && 
    DateTime.TryParse(date2, out d2) && 
    d2 <= d1) 
{ 
    // perform some code here 
} 
else 
{ 
    // strings didn't parse, but hey, 
    //at least you didn't throw an exception! 
} 
1

È preferibile avere la data formattata prima di effettuare il confronto. A seconda della tua culturainfo, il modo più sicuro per confrontare le date è formattare la stringa della data su "aaaa-mm-gg".

DateTime d1, d2; 
string date1 = "04/26/10"; 
string date2 = "04/25/10"; 
d1 = DateTime.Parse(date1.ToString("yyyy-MM-dd")); 
d2 = DateTime.Parse(date2.ToString("yyyy-MM-dd")); 
if (d1 > d2) 
{ 
     //do something 
} 
Problemi correlati