Назад | Перейти на главную страницу

Простая проблема с форматами даты

Мы размещаем веб-сайт, который при просмотре локально загружается нормально, но если вы перейдете на него извне, вы получите

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 для английского языка (Великобритания).

Полный список здесь