Мы размещаем веб-сайт, который при просмотре локально загружается нормально, но если вы перейдете на него извне, вы получите
Conversion from string "1/15/2010 8:46:01 AM" to type 'Date' is not valid.
Что мне изменить на сервере, чтобы это исправить. При просмотре сайта на сервере он работает, хотя я вошел на сервер как другой пользователь, чем в IIS.
Любая идея, что это сейчас действительно начинает вызывать головную боль.
Поскольку вы упоминаете в комментарии к одному из других ответов, что на некоторых машинах он работает, а на других - нет, это предполагает, что проблема может быть на клиенте.
При просмотре веб-страниц ваш браузер предоставляет серверу набор принятых / предпочтительных локалей.
Вам следует взглянуть на эти настройки на машинах, на которых что-то работает, и сравнить их с настройками на машинах, где это не работает. Возможно, некоторые машины были переключены с запроса локали Великобритании на запрос локали США (или наоборот).
Похоже, что вам нужно изменить ОС, чтобы войти в панель управления> Язык и региональные стандарты> Стандарты и форматы> Установите в раскрывающемся списке Язык на английский (Великобритания) и Местоположение на Соединенное Королевство.
В идеале код должен использовать Культурно-инвариантные даты чтобы обойти эти проблемы вместе с методы форматирования даты.
Я хотел бы увидеть код, который вызывает у вас проблемы, но "15.01.2010 8:46:01 AM" - допустимая дата в кодировке en-US. Убедитесь, что вы используете культуру en-US; не предполагайте, что это основано на машине, которую вы используете для разработки / тестирования. Кроме того, если строки DateTime основаны на вводе, рассмотрите случаи, когда пользователь может переопределить текущую культуру через Панель управления.
Вот пример из MSDN:
string dateString;
CultureInfo culture;
DateTimeStyles styles;
DateTime dateResult;
// Parse a date and time with no styles.
dateString = "03/01/2009 10:00 AM";
culture = CultureInfo.CreateSpecificCulture("en-US");
styles = DateTimeStyles.None;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
Console.WriteLine("{0} converted to {1} {2}.",
dateString, dateResult, dateResult.Kind);
else
Console.WriteLine("Unable to convert {0} to a date and time.",
dateString);
Вероятно, это связано с локалью, которую вы используете при преобразовании. Возможно, внешне используется формат Великобритании, но внутри используется формат США. Убедитесь, что вы указали точный формат, который вы ожидаете при преобразовании строки в дату.
Источник или нет источника, если это приложение ASP.NET, вы можете изменить культуру в web.config на правильную - см. этот вопрос и комментарий к моему ответу.
<system.web>
<globalization culture="en-US" uiCulture="en-US" />
<system.web />
Поскольку настройки ОС являются индивидуальными для каждого пользователя, у вас могут возникнуть проблемы при попытке изменить их с помощью панели управления ОС - следовательно, попытка изменить их в приложении, как указано выше, обычно проще и надежнее.
Языковой стандарт сервера или базы данных был установлен на США (поскольку месяц / день / год - это дата в американском формате), но код ожидает дату в британском формате (день / месяц / год).
Проверьте их и убедитесь, что они совпадают, и все должно быть в порядке.
Взгляни на Как изменить языковой стандарт сервера по умолчанию
Вы можете попробовать это setlocale.exe файл, чтобы установить это
00000409 для английского языка (США).
00000809 для английского языка (Великобритания).