C # анализ региональных строк даты и времени - PullRequest
3 голосов
/ 25 октября 2010

Я пытаюсь сделать небольшое приложение для проекта, в котором могут использовать клиенты со всего мира. Проблема, с которой я сталкиваюсь, заключается в том, что серверная часть настраивается с использованием XML-файлов, которые генерируются и загружаются в общую сеть, и в этих XML-файлах я храню переменную даты и времени, которая сообщает, когда определенная задача запускается и завершается. Программа падает с определенными интервалами загрузки с исключением формата, и после некоторых исследований я обнаружил, что мне нужно настроить региональный анализатор времени и даты.

Вопрос, который у меня возникает, заключается в том, как я могу преобразовать время в файле XML, независимо от того, использует ли оно региональные настройки США, АС или Великобритании, и использовать ли оно локальные настройки клиента. Это делается с использованием VS C # 2005 и платформы .NET 3.5.

Заранее спасибо за помощь.

Ответы [ 2 ]

8 голосов
/ 25 октября 2010

Бэкэнды должны писать в стандартном формате.XML не должен просто использовать локальный формат даты - таким образом, безумие лежит.Суть XML в том, чтобы быть форматом обмена для компьютеров , а не для людей .Если вы не форматируете что-либо для человеческого потребления, вам не следует использовать локальные вариации.

Так что либо используйте определенный формат везде, указав CultureInfo.InvariantCulture при форматировании, либо используйте dt.ToString("o") или другую строку формата, инвариантного к культуре.

Если вы просто говорите о моменте времени (т.е. местное время не имеет значения, только глобальный момент), вам следует также убедитесь, что вы используете согласованный часовой пояс, где UTC является очевидным выбором.Например, используйте DateTime.UtcNow вместо DateTime.Now.

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

Если, однако, у вас нет такой роскоши, как изменить код генерации, вам может придется прибегнуть к передаче правого CultureInfo в DateTime.TryParseExact.Однако это означает, что вам нужно знать культуру, использованную для создания файла.Если файлы создаются с учетом культурных особенностей, и вы не знаете, какую культуру они используют, вы в основном напичканы.Например, 05.03.2010 может означать 5 марта 2010 г. или 3 мая 2010 г. Без дополнительной информации у вас нет способа решить, какой из них использовать.

1 голос
/ 25 октября 2010

Региональные настройки подразумевают формат.Это не ваше главное беспокойство.Формат прост (используйте DateTime.Parse или .ParseExact. Часовые пояса должны быть вашей главной заботой .

Пожалуйста, обратитесь к Как преобразовать строку в локальную дату и время?

...