Conversione di stringa formattata gg / mm / aaaa in datetime

Sono nuovo di DotNet e C #. Voglio convertire una stringa in formato mm/dd/yyyy nell’object DateTime . Ho provato la funzione di analisi come di seguito ma sta generando un errore di runtime.

 DateTime dt=DateTime.Parse("24/01/2013"); 

Qualche idea su come posso convertirlo in datetime?

Devi utilizzare DateTime.ParseExact con il formato "dd/MM/yyyy"

 DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); 

È più sicuro se usi d/M/yyyy per il formato, dal momento che gestirà sia le cifre singole che le doppie cifre giorno / mese. Ma questo dipende in realtà se ci si aspetta valori a singola / doppia cifra.


Il tuo formato data day/Month/Year potrebbe essere un formato data accettabile per alcune culture. Ad esempio per Canadian Culture en-CA DateTime.Parse funzionerebbe 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 precedenti funzionerebbero perché il formato della stringa è accettabile per la cultura en-CA . Dal momento che non stai fornendo alcuna 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ù su 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 gruppo di metodi TryParse in .Net framework non genera eccezioni su valori non validi, ma restituisce un valore bool indica il successo o il fallimento nell’analisi.

Si noti che ho usato rispettivamente solo d e M per giorno e mese. Single d e M funziona sia per singola / doppia cifra giorno e mese. Quindi per il formato d/M/yyyy valori validi potrebbero essere:

  • “24.01.2013”
  • “24/1/2013”
  • “4/12/2013” // 4 dicembre 2013
  • “2013/04/12”

Per ulteriori letture dovresti vedere: Stringhe di formato di data e ora personalizzate

usa DateTime.ParseExact

 string strDate = "24/01/2013"; DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null) 
  • DateTime.ParseExact

null utilizzerà la cultura corrente, che è piuttosto pericolosa. Cerca di fornire una cultura specifica

 DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture) 

Puoi usare il formato "dd/MM/yyyy" per usarlo in DateTime.ParseExact .

Converte la rappresentazione di stringa specificata di una data e un’ora al suo equivalente DateTime utilizzando il formato specificato e le informazioni sul formato specifico della cultura. Il formato della rappresentazione della stringa deve corrispondere esattamente al formato specificato.

 DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); 

Ecco una DEMO .

Per ulteriori informazioni, controlla le Custom Date and Time Format Strings