Сервер установлен в en-GB в региональных настройках, но DateTime разбирается как en-US - PullRequest
4 голосов
/ 03 февраля 2012

Я обрабатываю записи, проталкивая каждую запись через этапы проверки, а затем в базу данных. Один из шагов проверки требует проверки, являются ли определенные столбцы датами. Я сделал это с помощью DateTime.TryParse (s, out DateTime), предполагая, что это будет использовать настроенные региональные параметры на компьютере, на котором запущен процесс. На моем локальном компьютере это класс-оболочка, работающий в жгуте командной строки из Visual Studio (для простоты отладки). Таким образом, 13 января 2010 года форматируется как 13 января 2010 года в соответствии с настройкой en-GB на моем компьютере с Windows 7.

При установке этого на наш тестовый сервер, Windows Server 2008 R2, этот класс-оболочка запускается в Window Service (под учетной записью LocalSystem). Точно такой же код, я разработал его так, чтобы сервис был просто тонкой оболочкой. Однако после многих циклов отладки сервер, по-видимому, анализирует 13.01.2010 как en-US и, следовательно, не работает. Это несмотря на то, что для региональных настроек установлено значение en-GB. (См. Скриншот)

Regional Settings on server

Обратите внимание, что это путь до того, как он попадет на SQL Server, поэтому это не является частью этой проблемы.

После борьбы с этим я форсировал ситуацию, используя приведенный ниже код и установив необходимый формат en-GB.

Culture = CultureInfo.CreateSpecificCulture("en-GB");
DateTimeStyles dateTimeStyles = DateTimeStyles.None;
DateTime dt;
bool pass = DateTime.TryParse(s,Culture,dateTimeStyles, out dt);

Теперь это работает. У меня такой вопрос: почему служба Windows, работающая в локальной системе, предполагает использование en-US, а не en-GB?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2012

Описание

Вы можете установить культуру текущего потока, используя Thread.CurrentThread.CurrentCulture.Это повлияет на все специфичные для культуры вещи в текущем потоке.

Пример

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB");

Дополнительная информация

Обновление

Кажется, что ваши региональные настройки, связанные с профилем вашей учетной записи, не имеют значения, когда служба работает с учетной записью SYSTEM.Культура по умолчанию для службы Windows - en-US.В сети много дискуссий.Все заканчивается "установить культуру CurrentThread", как мой ответ.

2 голосов
/ 28 февраля 2014

Решено для меня путем установки параметра глобализации .net «Задать культуру пользовательского интерфейса».

На сервере Windows 2008:

  • Загрузить диспетчер IIS

  • Перейти на веб-сайт

  • .net Глобализация

  • Установить для UI Culture значение "English (United Kingdom) (ru)-GB) "

Спасибо

1 голос
/ 14 августа 2012

Я столкнулся с этой проблемой несколько дней назад, через некоторое время я понял, что для моего параметра «Пул приложений» было установлено значение «Локальная системная учетная запись», я изменил его, чтобы вы использовали настраиваемую учетную запись («Администратор»), поэтому мне не нужно устанавливатькультура текущей темы.

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