2015-09-08 7 views
0

В моем файле web.config у меня есть эта строка:Invalid исключение формат даты и времени для норвежской культуры

<globalization culture="auto:en-GB" uiCulture="auto:en-GB" requestEncoding="utf-8" responseEncoding="utf-8" responseHeaderEncoding="utf-8"/> 

ASP.Net красиво ухаживает всех форматов даты/времени. Применяя следующий код на странице образца ...

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    txt.Text = New DateTime(2010, 1, 25).ToString() 
End Sub 

Protected Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click 
    Dim dt As DateTime = Convert.ToDateTime(txt.Text.Trim()) 
    Trace.Warn(dt.ToString()) 
End Sub 

С браузером, установленным на английском языке (Великобритания) Я вижу, как отображается

25/01/2010 00:00:00 

При нажатии на кнопку, и их преобразования обратно в дату значение DateTime, оно отлично работает.

Если я изменить свой браузер (Chrome) настройки на Норвежский, и загрузить страницу, я вижу это:

25.01.2010 00.00.00 

Это опять-таки является правильным, но, если я затем отправить форму, ASP .Net:

Строка не была признана действительной DateTime.

Строка 9: Dim дт Как DateTime = Convert.ToDateTime (txt.Text.Trim())

Почему это происходит? Конечно, если ASP.Net имеет смысл показать даты, основанные на настройках культуры, они должны уметь их читать? Я пробовал английский, английский и английский, и оба работали, как ожидалось, плюс другие, поэтому он каким-то образом связан с норвежцем.

ответ

1

Наконец-то нашел ответ. Это ошибка в .Net framework для v4.0 +.

Было reported in Microsoft Connect, а временное решение - detailed here. По-видимому, это проблема, связанная с Windows 10:

Windows 10 изменяет настройки форматирования даты и времени для некоторых культур . Особую озабоченность вызывают семь культур для трех различных регионах:

  1. Финский
  2. Норвежский (варианты «Норвегия» и «Шпицберген и Ян Майен»)
  3. Сербский (варианты «кириллицы, Косово», « Латинская, Черногория »,« Латинская, Сербия »и« Латинская, Косово »).

Для этих семи культур Windows 10 изменяет дату и время на 0.. Например, на финском языке стандартная дата была 26.8.2015 21:08, а сейчас 26.8.2015 21.08 - обратите внимание на тонкое изменение разделителя времени.

Во всех выпущенных в настоящее время версиях .NET, DateTime.Метод parse имеет недостаток: он всегда не разбирает дату или дату + время комбинация в культуре, где разделители даты и времени одинаковы символ. Эта ошибка, вместе с изменениями культуры Windows 10, разбивает ранее жесткое правило DateTime.Parse всегда может проанализировать представление DateTime по умолчанию в культуре. Теперь DateTime.Parse (DateTime.Now.ToString()) больше не работает в соответствии с описанными условиями . Также не DateTime.Parse (DateTime.Now.ToShortDateString()), который несколько неинтересен, так как измененный разделитель времени даже не задействован, , но правда тем не менее - парсер считает, что вместо этого он обрабатывает время даты.

Официальный патч будет выпущен в сентябре 2015 года

0

Используйте перегруженность Convert.ToDateTime(string, IFormatProvider), чтобы указать CultureInfo для использования.

+0

Я думал, что это было сделано автоматически, если IFormatProvider не используется как часть настроек глобализации web.config/по умолчанию? – EvilDr

+0

MSDN указывает на перегрузку (string): '' возвращаемое значение является результатом вызова метода DateTime.Parse по значению с использованием информации форматирования в объекте DateTimeFormatInfo, который инициализирован для текущей культуры''; Я сомневаюсь, что это относится к информации о культуре приложения по умолчанию, которую вы назначили, но к информации о культуре машины, на которой запущено приложение. –

+0

Да, но затем он говорит: 'Если поставщик ничто, используется DateTimeFormatInfo для текущей культуры', что позволяет легко глобализировать, или оно должно быть *. Даже установка текущей культуры на каждом PreRequest не позволяет остановить ошибку. Я думаю, что это может быть ошибка .Net для норвежского языка, поскольку en_GB и en_US работают отлично (в частности) ... – EvilDr

 Смежные вопросы

  • Нет связанных вопросов^_^