2014-10-09 3 views
5

Вот вам странный..ToShortDateString возвращает другой культурный формат, чем ожидалось

У нас есть интерфейс C#, который работает с начала года без проблем на компьютере с Windows XP (32bit). Мы только что обновили ПК до Windows 7 (64 бит) с приложениями, установленными SCCM.

С последней версией даты в текстовой области начали появляться в формате США (5/2/2014) вместо формата в Великобритании (02/05/2014).

Код, который в настоящее время используется:

string Lines = FromFormat.Text + " from " + FromFormat.Charge_From.ToShortDateString() + " to " + FromFormat.Charge_To.ToShortDateString() +"."; 

Где FromFormat находится объект с исходными данными, Charge_From & Charge_To являются DataTime переменными.

Мы проверили региональные настройки компьютера и создал небольшой тест приложения для отображения параметров преклира из .Net оба они заданы в Великобритании форматов Код для тестового приложения:

label1.Text = DateTime.Now.ToString(); 
label2.Text = DateTime.Now.ToString("dd MMM yyyy"); 
label3.Text = DateTime.Now.ToShortDateString(); 
label4.Text = Thread.CurrentThread.CurrentCulture.EnglishName; 

Я знаю, что Я могу заменить ToShortDateString() на ToString("dd/MM/yyyy"), чтобы заставить правильный формат, но мой вопрос, почему это происходит?

Это как-то связано с обновлением окон 7? или SCCM?

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

+0

Какова ваша 'CurrentCulture'? Это 'en-GB' или' en-US'? –

+0

_ «Я знаю, что я могу заменить ToShortDateString() на ToString (« dd/MM/yyyy »), чтобы заставить правильный формат« _ Это неверно, «ToString (« dd/MM/yyyy »)» также будет используйте разделитель дат вашей текущей культуры вместо '/'. –

+0

Насколько я могу судить, все компьютеры используют en-GB – Tony

ответ

0

После долгих испытаний и царапины головок мы думаем, что нашли ответ на этот вопрос.

Во время тестирования мы заметили, что ПК, у которого был интерфейс, установленный через SCCM (только для Windows 7), выпускал форматированный текст в формате США, но те, которые были напрямую через Click Once (преимущественно XP), выпускали текст с форматированием даты в Великобритании.

Дальнейшие испытания подтвердили, что если мы установили ПК с Windows 7 через Click, мы получили текст с форматированием даты в Великобритании.

После большой путаницы мы заметили, что когда SCCM установил интерфейс, он устанавливал RTM-версию средства просмотра отчетов, но когда Click Once устанавливал интерфейс, была установлена ​​версия средства просмотра отчетов SP1.

Мы изменили SCCM для установки Report Viewer SP1 и протестировали новую версию интерфейса SCCM и получили британские даты.

Почему версия Report Viewer повлияет на настройки культуры ПК или как работает ToShortDateString(), мы понятия не имеем, но это, похоже, проблема.

8

ToShortDateString method использует ShortDatePattern property, который идентичен по "d" standard date and time format вашего CurrentCulture.

en-GBShortDatePattern: dd/MM/yyyy.

Но en-US .

Вот почему вы не всегда можете заменить ToShortDateString и ToString("dd/MM/yyyy"). Они не всегда одинаковы. И "/" Custom Format Specifier имеет особое значение как замените меня текущей культурой или разделителем дат культуры указанного времени.

Я подозреваю, что ваши региональные настройки изменены в процессе обновления, поэтому метод ToShortDateString генерирует разные результаты.

Но так как вы не сказали нам свой CurrentCulture, мы никогда не знаем, что проблема реального есть ..

+0

Моя первая мысль о том, что региональные настройки изменились, но они настроены на английский (Великобритания), который совпадает с тем, как установлены компьютеры XP. – Tony

+0

Странно то, что когда мы запускаем тестовую программу на ПК, сообщается, что компьютер является английским (Великобритания), но когда вы запустите интерфейс через несколько секунд, он записывает дату в формате в США. мы уже обнаружили, что в Windows 7 есть несколько мест, где ODBC хранится/доступен, есть ли что-то подобное для региональных настроек? – Tony

+0

@Tony Итак, ваша собственность 'CurrentCulture'' 'en-GB'? Запустите в своей программе и посмотрите. –

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