Невозможно проанализировать DateTime - PullRequest
4 голосов
/ 14 января 2009

Я пытаюсь разобрать строку даты / времени, используя DateTime.ParseExact. Он работает везде, кроме одной машины - он просто не будет анализироваться на этой машине. Вопрос: почему? Что может отличаться на этой машине, чтобы она вызывала такое поведение?

Вот некоторые вещи, на которые я уже посмотрел:

  • CultureInfo передается DateTime.ParseExact, а именно CultureInfo.InvariantCulture
  • Региональные настройки на мошеннической машине совпадают с настройками на машине, на которой работает анализ.
  • Да, строка в правильном формате, dd/MM/yyyy HH:mm:ss

Ответы [ 4 ]

6 голосов
/ 14 января 2009

Я всегда нахожу, что региональные настройки могут быть хитрыми, и вы никогда не сможете предположить, что пользователи вашего приложения вообще даже правильно настроят свои машины!

Все, что я использовал для разбора дат, если они должны быть строками, - это разбор в формате «dd / MMM / yyyy», например. «14 / ЯНВАРЯ 2009» будет хорошо переводиться независимо от настроек.

Кстати, этот прием также работает и с SQL Server:)

1 голос
/ 14 января 2009

Трудно догадаться, каким может быть решение без информации об исключениях (о которой спрашивал Марк Гравелл) и / или некоторого примера кода.

По моему опыту, у меня были проблемы с датой / временем из-за культурных проблем. Вы сказали, что уже пытались жестко запрограммировать это.

как насчет реальной культуры, в которой происходит процесс? если этот код находится на веб-сайте asp.net, культура устанавливается на основе настроек браузера пользователя (передается в запросе).

попробуйте сделать это в своем коде, чтобы жестко закодировать текущую культуру потоков, чтобы посмотреть, поможет ли это как способ отладки этой проблемы.

// Replace the culture with whatever you required.
System.Threading.Thread.CurrentThread.CurrentCulture = 
    CultureInfo.CreateSpecificCulture("en-GB"); 

Расскажите нам, что происходит, когда вы пытаетесь это сделать? ** Я ненавижу вводить ответы, когда у нас недостаточно информации. это скорее предложение, чем ответ:)

0 голосов
/ 14 января 2009

Я согласен с Pure.Krome, что нужна дополнительная информация. С этой целью вопросы:

  • Какое исключение выдается?
  • Какой метод перегрузки вы вызываете, и что именно вы ему передаете?
  • Проверено ли, что версия .NET во всех системах одинакова? Включая версию пакета обновления?
  • Является ли строка, которую вы анализируете, генерируемой вашей программой, или она поступила из внешнего источника? Если он внешний, то вы убедились, что строка не каким-то образом не экранирована на мошеннической коробке? Возможно, версия любой программы, которая создает строку, устарела и содержит ошибку.
0 голосов
/ 14 января 2009

Убедитесь, что настройки региона на машине, которая не работает, соответствуют машинам, которые работают. Чтобы избежать подобных проблем в будущем, укажите культуру при разборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...