L'analisi delle date esatte in C# non dovrebbe obbligarti a creare un IFormatProvider
-
09-06-2019 - |
Domanda
Qualcuno, per favore, correggimi se sbaglio, ma sto analizzando le date aaaa/MM/gg (o altri formati specifici) in C# Dovrebbe essere facile come
DateTime.ParseExact(theDate, "yyyy/MM/dd");
ma no, C# ti obbliga a creare un IFormatProvider.
Esiste un modo intuitivo per app.config per impostarlo in modo da non doverlo fare ogni volta?
DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true));
Soluzione
L'argomento IFormatProvider può essere null.
Altri suggerimenti
ParseExact ha bisogno di una cultura:considera "aaaa MMM gg".MMM sarà un nome di mese localizzato che utilizza la lingua corrente.
Utilizza la cultura dell'applicazione corrente:
DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture);
Puoi impostare la cultura dell'applicazione in app.config utilizzando il tag Globalization.Penso.
Crea un metodo di estensione:
public static DateTime ParseExactDateTime(this string dateString, string formatString) {
return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true));
}
Richiede il provider del formato per determinare i simboli e le stringhe di data e ora particolari (come i nomi dei giorni della settimana in una lingua particolare).È possibile utilizzare un valore null, nel qual caso viene utilizzato l'oggetto CultureInfo che corrisponde alla lingua corrente.
Se non vuoi doverlo specificare ogni volta, crea un metodo di estensione che passi null o CultureInfo("en-CA", true) come provider del formato.
Puoi anche creare semplicemente IFormatProvider una volta e memorizzarlo per un uso successivo.
Potresti anche usare la classe Convert
Convert.ToDateTime("2008/11/25");
//Converti la data in un formato compatibile con MySql
DateTime DateValue = Convert.ToDateTime(datetimepicker.text);
string datevalue = DateValue.ToString("aaaa-MM-gg");
Cosa c'è di sbagliato nell'usare Globalization.CultureInfo.InvariantCulture ?