.net Как показать время в правильном формате? - PullRequest
3 голосов
/ 23 декабря 2011

У меня есть надстройка VSTO Outlook. Эта надстройка показывает окно winforms с контролем DateTimePicker, оно используется для выбора времени суток. Я хочу установить формат времени, аналогичный текущему формату времени Windows (как в часах на панели задач).
Для этого я использую следующий код:

this.dateTimePicker1.Format = DateTimePickerFormat.Custom;
this.dateTimePicker1.CustomFormat = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern;

В настройках «Регион и язык» в Windows у меня есть французский в «Формат и местоположение» и английский в «Клавиатурах и языках».
В результате в своей форме я вижу 7:00 вместо 19:00.
CurrentCulture, CurrentUICulture и InstalledUICulture возвращают кратковременный формат "h: mm tt", а название культуры - en-US.
У меня вопрос, как определить, что Windows показывает время во французском формате (ЧЧ: мм) и показывать время в DateTimePicker в этом формате?

- редактировать
Когда я запускаю следующий код в отдельном консольном приложении

Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern); 
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern); 
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern); 

возвращается
HH: мм
HH: мм: сс
дддд д мммм гггг чч: мм: сс

В надстройке Outlook аналогичный код возвращает американский формат:

ч: мм тт
ч: мм: сс тт
дддд, мммм дд, гггг ч: мм: сс тт

Outlook настроен на использование языка Windows по умолчанию (английский).

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Вместо того, чтобы использовать пользовательские форматы, вы не можете использовать ..

this.dateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Time;

Это должно показать время в правильном формате (т.е. выбранном пользователем)

- редактировать

Что вы получите, если запустите следующее?

Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern);
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern);
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern);

С моим регионом 'регион и язык', установленным на 'French (France)', я получаю это.

HH:mm
HH:mm:ss
dddd d MMMM yyyy HH:mm:ss
0 голосов
/ 26 декабря 2011

Чтобы узнать время в формате Windows, покажите форму в отдельной ветке.При отображении в потоке Outlook он принимает настройки культуры Outlook.

...