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));
Foi útil?

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 ?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top