Converti la data dal formato MM / gg / AAAA al formato gg / MM / AAAA

Sto affrontando un piccolo problema che non sono in grado dopo aver provato così tante cose quindi eccola … C’è una casella di testo nella mia pagina in cui sto inserendo la data e voglio quella data in un object datetime.

per es: data inserita: 11/2/2010 (gg / MM / aaaa) dovrebbe essere nello stesso formato quando sto accedendo in object data ora, ma si sta cambiando in (2/11/2011 vale a dire: MM / gg / formato yyyy).

spero di avere un senso qui tutto ciò che voglio è una cosa come questa …..

DateTime dt = convert.ToDateTime(txtDate.Text); 

dt dovrebbe essere (11/2/2010 piuttosto che il 2/11/2010)

@oded dopo aver usato il seguente codice

     DateTime sDate, eDate = new DateTime(); 

    // Per modificare le date per il nostro uso. DateTime.TryParseExact (txtFrom.Text, “gg / MM / aaaa”, CultureInfo.InvariantCulture, DateTimeStyles.None, out sDate);

     DateTime.TryParseExact(txtFrom.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out eDate); 

    Quello che sto ricevendo in edate e sdate è 1/1/0001 12:00:00 dove dovrebbe essere il 3/11/2011.

    EDIT: questo valore: “11/2/2010” non corrisponde al formato “gg / MM / aaaa”. Corrisponde al formato “d / M / yyyy” – per “gg / MM / aaaa” dovrebbe essere “11/02/2010”.

    Ecco perché TryParseExact non funziona per te. Devi scegliere il modello di formato giusto.


    Un valore DateTime non ha un formato . Rappresenta solo la data e l’ora (nel calendario ISO e possibilmente in diversi fusi orari, ma è diverso). È come un int – non rappresenta “un intero decimale” o “un intero esadecimale” – è solo un numero intero all’interno di un particolare intervallo. È ansible formattare un numero come decimale o esadecimale, ma non ha intrinsecamente un formato.

    Sembra che dovresti analizzarlo con ParseExact per specificare il formato durante la conversione dalla casella di testo, o probabilmente TryParseExact :

     // This is assuming you're absolutely sure of the format used. This is *not* // necessarily the user's preferred format. You should think about where your // data is coming from. DateTime date; if (DateTime.TryParseExact(text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) { // Okay, successful parse. We now have the date. Use it, avoiding formatting // it back to a string for as long as possible. } 

    Dovresti mantenere quel valore come DateTime a tutti gli effetti tranne che restituirlo a un utente – a quel punto potresti voler usare le loro impostazioni culturali.

    In particolare, se stai memorizzando il valore in un database, non dovresti convertirlo in testo e includerlo in un’istruzione SQL – questo è un problema. Invece, utilizzare un’istruzione SQL parametrizzata e impostarla come valore del parametro, sempre come DateTime .

    DateTime non memorizza le date in alcun formato specifico – utilizza una rappresentazione interna (cosa esattamente non dovrebbe importare).

    Dopo aver analizzato la stringa in un DateTime , non è presente alcun formato inerente. Esiste solo un formato quando si emette il valore. Quello che vedi nel debugger è semplicemente una conversione in una stringa usando le tue impostazioni di sistema.

    Se vuoi formattare il DateTime , usa ToString con una stringa di formato:

     dt.ToString("dd/MM/yyyy"); 

    Vale anche il contrario – se è necessario analizzare la stringa in modo non ambiguo, utilizzare ParseExact o TryParseExact (entrambi membri statici di DateTime ):

     DateTime dt; if(DateTime.TryParseExact(txtDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out td)) { // Valid date used in `txtDate.Text`, use dt now. } 

    Leggi le stringhe di formato di data e ora personalizzate e standard .

    Per evitare qualsiasi errore nei mesi / giorni durante l’analisi di una data, è probabilmente meglio utilizzare DateTime.Parse o DateTime.ParseExact di ToDateTime .

    Come hanno sottolineato questo thread e questo articolo .

    Prova DateTime.Parse con un fornitore di formato appropriato. Nel tuo caso dovrebbe essere

     IFormatProvider culture = new CultureInfo("de-DE", true); DateTime.Parse(txtDate.Text, culture ); 

    Se vuoi accedervi dato un particolare formato, dovresti usare DateTime.ToString (formato stringa).

    http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx