Não é possível analisar um DateTime
Pergunta
Eu estou tentando analisar uma seqüência de data / hora usando DateTime.ParseExact
. Ele funciona em todos os lugares, exceto em uma máquina - ele só não vai analisar nessa máquina. A pergunta é: Por quê? O que poderia ser diferente nessa máquina para que ele irá causar esse comportamento?
Aqui estão algumas coisas que eu já olhei:
- O
CultureInfo
é passado paraDateTime.ParseExact
, nomeadamenteCultureInfo.InvariantCulture
- As configurações regionais na máquina desonestos é o mesmo que as configurações em uma máquina onde os trabalhos de análise.
- Sim, a cadeia está no formato correto, que é
dd/MM/yyyy HH:mm:ss
Solução
Eu sempre acho que as configurações regionais pode ser complicado, e você nunca pode supor que os usuários do seu aplicativo vai mesmo ter sua configuração máquinas corretamente em primeiro lugar!
A pega-tudo que eu estive usando a datas de análise em se eles têm que ser strings é analisá-lo no formato "dd / MMM / aaaa", por exemplo, "14 / JAN / 2009" irá traduzir muito bem não importa o que as configurações são.
Aliás este truque também funciona com o SQL Server, bem como:)
Outras dicas
É muito difícil adivinhar o que a solução poderia ser feito sem informações de exceção (que Marc Gravell perguntado sobre) e / ou um código de exemplo.
Na minha experiência, eu tive problemas com data / vezes por causa de questões culturais. Você disse que já tinha um ir para embutir isso.
o que acontece com a cultura real o processo está sendo executado dentro? Se este código está em um site asp.net, a cultura é definido com base nas configurações de usuários do navegador (repassados ??no pedido).
Tente fazer isso em seu código para codificar a cultura tópicos atual para ver se isso ajuda como uma forma de depurar ainda mais esta questão.
// Replace the culture with whatever you required.
System.Threading.Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture("en-GB");
diga-nos o que acontece quando você tentar isso? ** Eu odeio entrar respostas quando não temos informação suficiente. esta é mais uma sugestão do que uma resposta:)
Certifique-se as definições de região na máquina que não funciona coincide com as máquinas que fazem o trabalho. Para evitar problemas como este no futuro, especifique a cultura ao analisar.
Eu concordo com Pure.Krome que mais informações é necessário. Para o efeito, as perguntas:
- O exceção está sendo jogado?
- Qual o método de sobrecarga que você está chamando, e que, exatamente, você está passando para ele?
- Você verificou que a versão .NET runtime é o mesmo em todas as caixas? Incluindo o Service Pack versão?
- é a string que você está de análise gerado pelo seu programa ou vem de uma fonte externa? Se for externo, você tem verificado que a cadeia não é inadequadamente escapou de alguma forma na caixa de desonestos? Talvez a versão de qualquer programa que cria a corda está desatualizado e tem um bug nele.