Conversione della stringa formattata dd/mm/yyyy in Datetime

Sono nuovo di DotNet e C#. Voglio convertire una stringa in formato mm/dd/yyyy in un oggetto DateTime. Ho provato la funzione parse come sotto, ma sta lanciando un errore di runtime.

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

Qualche idea su come posso convertirlo in datetime?

Soluzione

Devi usare DateTime.ParseExact con formato "gg/MM/aaaa"

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

È più sicuro se usi d/M/yyyy per il formato, dato che gestirà sia il giorno/mese a una cifra che a due cifre. Ma questo dipende davvero se ti aspetti valori a una o due cifre.


Il tuo formato di data day/Month/Year potrebbe essere un formato di data accettabile per alcune culture. Per esempio per la cultura canadese en-CA DateTime.Parse funzionerebbe come:

DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));

Oppure

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. Dato che non stai fornendo alcuna cultura alla tua chiamata a DateTime.Parse, la tua cultura attuale viene utilizzata per l'analisi che non supporta il formato della data. Leggi di più su questo su DateTime.Parse.


Un altro metodo per l'analisi è usare 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 nel framework .Net non lancia eccezioni su valori non validi, ma restituisce un valore bool che indica il successo o il fallimento dell'analisi.

Notate che ho usato una singola d e M rispettivamente per il giorno e il mese. Single d e M funzionano sia per il giorno che per il mese a una o due cifre. Quindi per il formato d/M/yyyy i valori validi potrebbero essere:

  • "24/01/2013"
  • "24/1/2013"
  • "4/12/2013" //4 dicembre 2013
  • "04/12/2013"

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

Commentari (3)

usare DateTime.ParseExact.

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

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

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

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

Converte la rappresentazione stringa specificata di una data e ora nel suo equivalente DateTime usando il formato specificato e le informazioni di formato specifiche della cultura

informazioni sul formato. Il formato della rappresentazione della stringa deve corrispondere esattamente il formato specificato.

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

Ecco un DEMO.

Per maggiori informazioni, controlla Custom Date and Time Format Strings

Commentari (0)