Come si formatta un DateTime in un formato diverso?

Ho una stringa che rappresenta una data in un determinato formato, che desidero formattare in modo diverso. Qualcuno mi ha detto di usare DateTime.(Try)ParseExact , così ho fatto:

 var dateString = "2016-02-26"; var formatString = "dd/MM/yyyy"; var parsedDate = DateTime.ParseExact(dateString, formatString, null); 

Vedete, voglio formattare la data come dd/MM/yyyy , quindi il 26/02/2016 . Tuttavia, questo codice genera un FormatException:

La stringa non è stata riconosciuta come un DateTime valido.

Come posso formattare un DateTime in modo diverso?

Prima di tutto, i DateTime non hanno alcun formato. Un DateTime contiene un momento nel tempo e una bandiera che indica se quel momento è Locale , Utc o Non specificato .

Struttura DateTime

Osservazioni

Il tipo di valore DateTime rappresenta le date e le ore con valori compresi tra 00:00:00 (mezzanotte), 1 gennaio, 0001 Anno Domini (Era comune) fino alle 23:59:59 PM, 31 dicembre 9999 DC (CE) in gregoriano calendario.

I valori temporali sono misurati in unità di 100 nanosecondi chiamati tick, e una data particolare è il numero di tick dalla mezzanotte di mezzanotte, 1 gennaio 0001 AD (CE) nel calendario di GregorianCalendar (esclusi i tick che verrebbero aggiunti in secondi bisestili) . Ad esempio, un valore di tick di 31241376000000000L rappresenta la data, venerdì 1 gennaio, 0100 12:00:00 mezzanotte. Un valore DateTime viene sempre express nel contesto di un calendario esplicito o predefinito.

L’unico momento in cui un DateTime viene formattato, è quando il suo valore viene express come una stringa.

La stringa di formato fornita a (Try)ParseExact è il formato in cui si trova la stringa di data (ora) in cui analizzare . Vedi MSDN: stringhe di formato di data e ora personalizzate per imparare come scrivere la propria stringa di formato.

Quindi il codice che stai cercando per analizzare quella stringa è questo, e ancora, assicurati che la stringa di formato corrisponda esattamente al formato della stringa della data di input:

 var dateString = "2016-02-26"; var formatString = "yyyy-MM-dd"; var parsedDate = DateTime.ParseExact(dateString, formatString, null); 

Ora parsedDate contiene un valore DateTime che puoi stampare nel formato desiderato (e parsedDate presente che dovrai sfuggire a / , poiché verrà interpretato come “il carattere separatore della data per la cultura corrente”, come spiegato in MSDN sopra collegamento ):

 var formattedDate = parsedDate.ToString("dd\\/MM\\/yyyy"); 

Questo formatterà la data nel formato desiderato:

 26/02/2016 

Puoi usarlo per la data della String

 DateTime.ParseExact(dateString, format, provider); 

e per il valore del fornitore

 CultureInfo provider = CultureInfo.InvariantCulture; 

come menzionato nella documentazione di Microsoft