2015-07-01 11 views
5

Ho bisogno di analizzare le date nel mio programma, ma non riesce sulla macchina di un utente (in Danimarca). Funziona per i suoi colleghi che hanno tutti le stesse impostazioni per quanto posso dire.DateTime.TryParse non riesce per un utente

Il codice è il seguente:

DateTime result; 
if (DateTime.TryParse(InputBox.Text, out result)) 
    YyyymmddField.Text = result.ToString("yyyyMMdd"); 
else 
    YyyymmddField.Text = "(invalid)"; 

CurrentCulture è da-DK e il suo formato configurato è: yyyy.MM.dd. La stringa di data che voglio analizzare è 2015.07.14. Questo funziona sulle nostre macchine qui (in Svezia) indipendentemente dalla cultura corrente. Funziona anche per i suoi colleghi, ma non per lui.

Abbiamo centinaia di utenti in tutto il mondo e per quanto ne sappiamo, il suo è l'unico computer che fallisce.

Qualcosa di diverso dall'attuale CultureInfo influisce sul funzionamento di TryParse?

+0

vi suggeriamo di cambiare ad esempio i dati a qualcosa di più chiaro dove il mese è, come '2015.12.01' –

risposta

7

questo funziona sulle nostre macchine qui (in Svezia) indipendentemente dalla corrente cultura

No. Non esiste una tale cosa. Se si utilizza DateTime.TryParse senza alcun IFormatProvider, verranno utilizzate le impostazioni CurrentCulture del computer corrente.

Da documentation;

La stringa s viene analizzata utilizzando le informazioni di formattazione nella corrente DateTimeFormatInfo oggetto, che viene fornito implicitamente dalla cultura filo corrente .

sto utilizzando .NET Framework 4.5 e ci sono solo 7 cultura all'interno di AllCultures che non ha questo formato data e ora di serie. Se non vuoi/non puoi dirci quale è l'altro CurrentCulture del tuo collega, suppongo che userà uno di questi dal mio punto di vista.

ar 
bn 
ml 
ar-SA 
bn-IN 
ml-IN 
bn-BD 

Invece di quella confusione, è possibile utilizzare InvariantCulture è la stringa ha un formato stabile come yyyy.MM.dd invece di sperare sue impostazioni CurrentCulture saranno analizzare o no.

+0

Tuttavia,' 2015.07.01' funziona anche in ' en-US' o 'de-DE'. In realtà non ho trovato una cultura in cui non funziona con 'DateTime.TryParse (InputBox.Text, out result)' e ho testato tutti i 209 installati. –

+0

Sì, volevo dire che non importa se cambio il mio formato nel Pannello di controllo, il risultato è lo stesso. – mickus

+0

@TimSchmelter Il mio male. Risolta quella parte.A proposito, ho avuto 7 culture che non riescono ad analizzarlo. –

0

In linea di principio, può essere una buona idea disporre di metodi riutilizzabili (come i metodi di estensione) per l'analisi di DateTimes e numeri, che utilizzano la cultura invariabile.

1

uso CultureInfo.InvariantCulture

DateTime result; 
    if (DateTime.TryParse(InputBox.Text, out result)) 
     YyyymmddField.Text = result.ToString("yyyyMMdd",CultureInfo.InvariantCulture); 
    else 
     YyyymmddField.Text = "(invalid)"; 
+0

Penso che tu voglia 'CultureInfo.InvariantCulture' come parametro per' TryParse() 'piuttosto che per' ToString() '. – David

Problemi correlati