Если культура не была установлена в потоке, Thread.CurrentThread.CurrentCulture
по умолчанию - «культура пользователя по умолчанию», которую он получает из базовой ОС. Это определяется разделом «Форматы» в апплете региональной панели управления.
Для службы у нее нет настроек панели управления по умолчанию, как для пользователя (в приведенном выше случае), поскольку она работает под учетной записью LocalSystem, у которой не будет профиля, поэтому она использует языковой стандарт системы из ОС. Я не уверен, что это можно сделать для службы, изменив настройки в Windows.
Есть несколько вещей, которые вы можете сделать:
вы можете явно установить CurrentCulture
основного потока при запуске службы. Если вы сделаете это, вам нужно будет помнить, что любые новые потоки, созданные в вашем сервисе, также должны будут иметь также установленный CurrentCulture
, поскольку потоки не наследуют свою культуру от родительских потоков.
вы можете настроить службу для запуска от имени определенного пользователя и установить региональные настройки этого пользователя (раздел форматов) в соответствии с культурой, которую вы хотите использовать. Когда служба запускается таким образом, она использует региональные настройки этого пользователя.
, поскольку ваша проблема связана с вызовом DateTime.ToString()
, убедитесь, что вы передали культуру AU методу ToString()
:
DateTime.ToString(new CultureInfo("en-AU"))
Вы можете добавить это как метод расширения, чтобы избавить вас от необходимости делать это везде:
public static string ToAUString(this DateTime dateTime)
{
return dateTime.ToString(new CultureInfo("en-AU"));
}
Затем вы можете позвонить DateTime.ToAUString()
, чтобы получить правильный вывод.