Estou tentando converter meu valor formatado de seqüência de caracteres em tipo de data com formato dd/MM/yyyy
.
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
Qual é o problema ? Ele tem uma segunda substituição que solicita IFormatProvider
. O que é isso? Não eu preciso passar isso também? Se sim, como usá-lo neste caso?
Editar
Quais são as diferenças entre Parse
e ParseExact
?
Editar 2
Ambas as respostas de Slaks e Sam estão trabalhando para mim, atualmente o usuário está dando a entrada, mas isso será garantido por mim que elas são válidas usando maskTextbox.
Qual resposta é melhor, considerando todos os aspectos, como segurança do tipo, desempenho ou algo que você queira
Respostas:
Use
DateTime.ParseExact
.fonte
dd/MM/yyyy
para que uma sequência de texto com um horário não seja analisada corretamente. Você precisará reduzir o tempo ou incluí-lo no padrão de formato. Há uma sobrecargaParseExact
que aceita uma matriz de padrões de formato e analisa o texto se ele corresponder a algum deles.CultureInfo.InvariantCulture
vez do atual, se está definindo um formato?Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
, isso quebrará sua solução. Para corrigir isso, use"dd'/'MM'/'yyyy"
(protegendo as barras com aspas simples) ou@"dd\/MM\/yyyy"
("escapando" das barras com barras invertidas).Você precisa ligar
ParseExact
, que analisa uma data que corresponde exatamente ao formato fornecido por você.Por exemplo:
O
IFormatProvider
parâmetro especifica a cultura a ser usada para analisar a data.A menos que sua string venha do usuário, você deve passar
CultureInfo.InvariantCulture
.Se a string vier do usuário, você deve passar
CultureInfo.CurrentCulture
, que usará as configurações especificadas pelo usuário em Opções Regionais no Painel de Controle.fonte
using System.Globalization;
A análise de uma representação de string de um DateTime é uma coisa complicada, porque diferentes culturas têm diferentes formatos de data. .Net está ciente desses formatos de data e os retira da sua cultura atual (
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat
) quando você ligaDateTime.Parse(this.Text)
;Por exemplo, a cadeia "22/11/2009" não corresponde ao ShortDatePattern dos Estados Unidos (en-US), mas corresponde à França (fr-FR).
Agora, você pode ligar
DateTime.ParseExact
e passar na seqüência de formato exata que você espera, ou em uma cultura apropriadaDateTime.Parse
para analisar a data.Por exemplo, isso analisará sua data corretamente:
Obviamente, você não deve escolher aleatoriamente a França, mas algo apropriado às suas necessidades.
O que você precisa descobrir é o que
System.Threading.Thread.CurrentThread.CurrentCulture
está definido e se / por que difere do que você espera.fonte
Embora as soluções acima sejam eficazes, você também pode modificar o arquivo webconfig com os seguintes ...
Ref: formato de data e hora diferente na máquina local em comparação com a máquina de produção
fonte
Pode ser necessário especificar a cultura para esse formato de data específico, como em:
Para mais detalhes, clique aqui:
http://msdn.microsoft.com/en-us/library/5hh873ya.aspx
fonte
Depois de passar muito tempo, resolvi o problema
fonte
use isso para converter string em datetime:
fonte
Com base nessa referência , a próxima abordagem funcionou para mim:
fonte
fonte
Assim como alguém acima disse que você pode enviá-lo como um parâmetro de string, mas ele deve ter este formato: '20130121', por exemplo, e você pode convertê-lo para esse formato, retirando-o diretamente do controle. Você poderá obtê-lo, por exemplo, em uma caixa de texto como:
para convertê-lo em: '20130121' você usa:
para que o SQL possa convertê-lo e colocá-lo no seu banco de dados.
fonte
Você pode usar também
fonte
Trabalhou para mim abaixo do código:
Namespace
fonte
Alterar manualmente:
A partir de 22/11/2015 será convertido em 22/11/2015
fonte