Ошибка даты и времени арабской культуры «ar-sa»

#c# #asp.net #.net #telerik

#c# #asp.net #.net #telerik

Вопрос:

У меня следующий сценарий: мой сайт разработан для работы с разными культурами (в основном арабским и английским), когда пользователь выбирает культуру «ar-sa» (из параметров Internet Explorer), все средства выбора даты и времени преобразуются в формат хиджры. На одной из моих страниц я использовал элемент управления RadTimePicker telerik, при запуске этой страницы из Visual Studio ошибка не появляется, но когда мы развернули эту страницу на сайте, вышла следующая ошибка:

Допустимые значения находятся в диапазоне от 1318 до 1450 включительно. Имя параметра: год

Я попытался развернуть страницу на компьютере моего коллеги (в локальном IIS), появляется ошибка. Затем я попытался развернуть его на своем компьютере с помощью IIS, на этот раз без ошибок!!

пожалуйста, кто-нибудь может дать мне подсказку о том, с чего начать, чтобы найти ошибку

Заранее спасибо

Комментарии:

1. Я бы начал с справочного форума Telerik.

2. Какой-либо код, участвующий в чтении / настройке элемента управления? Можете ли вы получить трассировку стека?

3. я пытался получить трассировку стека и не смог! мне нужно знать, почему эта разница между разными iis и vs virtual iis

Ответ №1:

Любые объекты даты и времени, созданные в .NET с помощью CultureInfo «ar-sa», будут использовать объект UmAlQuraCalendar, который указывает, что допустимые даты должны иметь свой год между 1318 и 1450. Проверьте .СОЗДАЙТЕ документацию для этого объекта, и вы увидите. Для моего проекта мне пришлось загрузить дату без языка, затем сверить ее диапазон с диапазонами минимального и максимального года календаря текущей культуры, и если они выходят за пределы этого диапазона, преобразовать значение в значение внутри этого диапазона, прежде чем анализировать дату и время, которым был присвоен соответствующий информационный объект культуры. Обратите внимание на это.Объекты NET date time ВСЕГДА написаны на григорианском языке. Чтобы увидеть дату как дату в другом календаре, вы всегда должны просматривать ее через объект Calendar, который соответствует используемой вами культуре.

Ответ №2:

http://www.telerik.com/community/forums/winforms/calendar-and-datetimepicker/valid-values-are-between-1318-and-1450-inclusive-parameter-name-year.aspx охватывает аналогичное использование.

Что касается того, почему это работает на одной машине, а не на другой, я бы заподозрил, что где-то по ходу используется одна из неявных культур (CurrentCulture и CurrentUICulture), и это может конфликтовать или не конфликтовать с вашим явным использованием ar-SA в зависимости от того, что это такое.

Комментарии:

1. я не понял, как насчет CurrentCulture и CurrentUICulture? я меняю их, чтобы они совпадали с выбранной пользователем культурой.

Ответ №3:

На каком сервере вы размещались? Формат даты и времени зависит от настроек на панели управления вашего компьютера.

Если ваш сайт размещен на сервере в США, вам необходимо соответствующим образом изменить контекст datetime.

Ответ №4:

УКАЖИТЕ свойство Culture как culture=»Английский (Соединенные Штаты)»

  <telerik:raddatepicker id="dt_DOB" runat="server" culture="English (United States)">
            </telerik:raddatepicker>
  

Чем использовать любую из культур.

Ответ №5:

в коде, лежащем в основе, установите календарь культуры таким, чтобы он всегда был грузинским. Смотрите ниже пример с Telerik DateTimePicker на mypage.aspx

mypage.aspx:

 <telerik:RadDateTimePicker ID="CtrlStartPeriod" runat="server">
<DateInput DateFormat="G" DisplayDateFormat="G" runat="server"></DateInput>
</telerik:RadDateTimePicker>
  

mypage.aspx.cs:

 protected override void OnInit(EventArgs e)
{
  base.OnInit(e);
  CtrlStartPeriod.DateInput.Culture.DateTimeFormat.Calendar = new GregorianCalendar();