è necessario utilizzare DateTime.ParseExact
con il formato "dd/MM/yyyy"
DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
Il suo più sicuro se si utilizza d/M/yyyy
per il formato, dal momento che consente di gestire sia singola cifra e doppia cifra giorno/mese. Ma questo dipende in realtà se ci si aspetta valori a singola/doppia cifra.
il formato data day/Month/Year
potrebbe essere un formato di data accettabile per alcune culture. Per esempio per la cultura canadese en-CA
DateTime.Parse
avrebbe funzionato come:
DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));
O
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture
Entrambe le linee di cui sopra avrebbe funzionato perché il formato della stringa è accettabile per en-CA
cultura. Poiché non stai fornendo cultura alla tua chiamata DateTime.Parse
, la tua cultura corrente viene utilizzata per l'analisi che non supporta il formato della data. Leggi di più a riguardo allo DateTime.Parse.
Un altro metodo per l'analisi utilizza DateTime.TryParseExact
DateTime dt;
if (DateTime.TryParseExact("24/01/2013",
"d/M/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt))
{
//valid date
}
else
{
//invalid date
}
Il TryParse
gruppo di metodi in NET Framework non genera un'eccezione per valori non validi, invece restituiscono un valore bool
indica il successo o il fallimento nel parsing.
avviso che ho utilizzato singolo d
e M
per giorno e mese rispettivamente. Il singolo d
e M
funziona per giorno/mese sia a singola che a doppia cifra.Così per il formato d/M/yyyy
valori validi possono essere:
- "24.01.2013"
- "24/1/2013"
- "2013/04/12" // 4 dic 2013
- "2013/04/12"
Per un approfondimento si dovrebbe vedere: Custom Date and Time Format Strings
Grazie mille. Avevo già provato DateTime.ParseExact() ma immagino che il trucco fosse con il null come terzo argomento. Stavo usando CultureInfo.InvariantCulture invece che mi avrebbe dato un errore di compilazione. –
@ user1872530, siete i benvenuti, avrebbe dovuto funzionare per voi, ma suppongo che vi manchi usando l'istruzione per System.Globalization, quindi provate 'System.Globalization.CultureInfo.InvariantCulture' invece, – Habib
Grazie. Stavo usando "gg/MM/aaaa" e l'analisi non è riuscita per "3/12/2016" cambiandola a "d/M/aaaa" ha funzionato come i valori di giorno e mese <10 non è più necessario anteporre zero. – ComeIn