Я обрабатываю записи, проталкивая каждую запись через этапы проверки, а затем в базу данных. Один из шагов проверки требует проверки, являются ли определенные столбцы датами. Я сделал это с помощью 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](https://i.stack.imgur.com/ieH0I.png)
Обратите внимание, что это путь до того, как он попадет на 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?