2013-04-01 8 views
74

Sono nuovo a DotNet e C#. Voglio convertire una stringa nel formato mm/dd/yyyy nell'oggetto DateTime. Ho provato la funzione di analisi come di seguito ma sta generando un errore di runtime.Conversione da gg/mm/aaa stringa formattata a Datetime

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

Qualche idea su come posso convertirlo in datetime?

risposta

198

è 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-CADateTime.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

+0

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. –

+1

@ 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

+1

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

8

uso DateTime.ParseExact

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

null userà la cultura corrente, che è un po 'pericoloso. Prova a fornire una specifica cultura

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

Dovresti usare "gg/MM/aaaa" invece di "gg/MM/AAAA". – Phoenician

5

È possibile utilizzare il formato "dd/MM/yyyy" per il suo utilizzo in DateTime.ParseExact.

converte la rappresentazione stringa specificata di una data e ora alla sua DateTime equivalente utilizzando il formato specificato e informazioni formato specifiche della lingua. 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 un DEMO.

Per ulteriori informazioni, consultare Custom Date and Time Format Strings