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 para DateTime.ParseExact, nomeadamente CultureInfo.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
Foi útil?

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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top