A análise de datas exatas em C# não deve forçá-lo a criar um IFormatProvider
-
09-06-2019 - |
Pergunta
Alguém, por favor, me corrija se eu estiver errado, mas analisando datas aaaa/MM/dd (ou outros formatos específicos) em C# deve seja tão fácil quanto
DateTime.ParseExact(theDate, "yyyy/MM/dd");
mas não, o C# força você a criar um IFormatProvider.
Existe uma maneira amigável do app.config de definir isso para que eu não precise fazer isso todas as vezes?
DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true));
Solução
O argumento IFormatProvider pode ser nulo.
Outras dicas
ParseExact precisa de uma cultura:considere "aaaa MMM dd".MMM será um nome de mês localizado que usa a cultura atual.
Use a cultura atual do aplicativo:
DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture);
Você pode definir a cultura do aplicativo no app.config usando a tag Globalization.Eu penso.
Crie um método de extensão:
public static DateTime ParseExactDateTime(this string dateString, string formatString) {
return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true));
}
Ele requer o provedor de formato para determinar os símbolos e strings específicos de data e hora (como nomes dos dias da semana em um idioma específico).Você pode usar um nulo; nesse caso, o objeto CultureInfo que corresponde à cultura atual será usado.
Se você não quiser especificá-lo todas as vezes, crie um método de extensão que passe null ou CultureInfo("en-CA", true) como o provedor de formato.
Você também pode simplesmente criar o IFormatProvider uma vez e armazená-lo para uso posterior.
Você também pode usar a classe Convert
Convert.ToDateTime("2008/11/25");
//Converte a data para formato compatível com MySql
DateTime DateValue = Convert.ToDateTime(datetimepicker.text);
string datevalue = DateValue.ToString("aaaa-MM-dd");
O que há de errado em usar Globalization.CultureInfo.InvariantCulture ?