2011-08-26 11 views
7

Eventuali duplicati:
DateTime.TryParse century control C#DateTime TryParse - mappatura '99' al 2099, non 1999

ho bisogno di TryParse una stringa come la seguente: "01/01/99 "in un oggetto DateTime, e sto usando qualcosa di simile:

DateTime outDate; 
if (DateTime.TryParseExact("01/01/99", "dd/MM/yy", null, System.Globalization.DateTimeStyles.None, out outDate)) 
{ 
    //Do stuff here 
} 

Naturalmente, questa data viene analizzato come 01/01/1999, che è non quello che voglio - voglio che analizzi come 2099. C'è un modo semplice per farlo? Modificando tristemente i dati che sto analizzando per includere l'intero anno non è un'opzione.

+7

Non abbiamo imparato nulla da Y2K? :( –

+0

IIRC, esiste una soglia di anno per determinare il secolo in base all'anno a 2 cifre Non sono sicuro se la soglia può essere modificata tramite la configurazione –

+1

se gli anni a due cifre devono sempre essere considerati come '20yy'? –

risposta

5

Scattato da this answer, è possibile fornire ParseExact() con un oggetto cultura. Il sospetto TryParseExact() sarebbe lo stesso:

CultureInfo ci = new CultureInfo(CultureInfo.CurrentCulture.LCID); 
ci.Calendar.TwoDigitYearMax = 2099; 
//Parse the date using our custom culture. 
DateTime dt = DateTime.ParseExact(input, "MMM-yy", ci); 
+0

Fantastico, funziona a meraviglia - grazie! – Chris

0

Questa è un'impostazione regionale. In Windows 7 puoi modificare in Pannello di controllo> Orologio, Lingua e Area> Regione e Lingua. Nella scheda formati, premi il pulsante Avanzate e guarda sotto la data.

Spento dalla testa, non so in alcun modo di modificarlo pragmaticamente, ma se lo si imposta nel pannello di controllo l'app lo userà finché non si cambia la cultura.

Detto questo, hai davvero bisogno di andare a battere chiunque ti fornisca questi dati con un oggetto pesante. Dovremmo aver eliminato questo tipo di assurdità Y2K 12 anni fa.

modifica - il link del commento di dan04 ha anche alcune opzioni.