CultureInfo & DateTimeInfo: Как проверить, работает ли время 24 часа? - PullRequest
11 голосов
/ 16 июля 2009

Я изменяю глобализированное веб-приложение, которое использует сохраненный CultureInfo для каждого вошедшего в систему пользователя.

Клиент хотел бы, чтобы ввод данных о времени был локализован. Отображение не является проблемой, так как форматирование уже доступно. Тем не менее, мне нужно определить, используется ли текущая культуральная информация для 24-часового времени или am / pm, чтобы я мог отображать правильные поля ввода (а не только текстовое поле).

Моя первоначальная идея состояла в том, чтобы проверить свойство DateTimeInfo CultureInfo и посмотреть, содержит ли ShortTimePattern прописную букву H или строчную букву h, но мне это показалось недостаточно надежным.

Есть ли лучший способ? Я прочитал свойства обоих классов, но если я что-то упустил, я не вижу никаких существующих методов или свойств.

Ответы [ 3 ]

7 голосов
/ 16 июля 2009

Я не думаю, что есть лучший способ получить эту информацию. Шаблон времени для культуры может содержать что угодно (пользователь может даже создать собственную культуру, в которой ShortTimePattern равен «\ hello», а затем DateTime.ToString() будет возвращать «hello» в любое время). В таком случае, как могла бы структура определить, находится ли это CultureInfo в 24-часовом или 12-часовом формате?

Таким образом, «обычный» DateTimeFormatInfo.ShortTimePattern обязательно будет содержать либо «h», либо «H», в противном случае час не будет отображаться. Я думаю, что вы можете следовать своей первоначальной идее и проверить это. Вы также можете проверить, что 'h' или 'H' не экранированы с помощью \ like в моем примере "\ hello", потому что это не будет представлять час:)

6 голосов
/ 24 февраля 2015

Самый надежный способ - проверить, является ли DateTimeFormatInfo.AMDesignator пустой строкой.

if (DateTimeFormatInfo.CurrentInfo.AMDesignator == "")
  //24hour format
else
  //12hour format
5 голосов
/ 25 декабря 2015

Проверка на «H» / «h» кажется более надежной, чем проверка на обозначение AM / PM. Хороший пример - en-gb: Строка формата времени - ЧЧ: мм, а обозначения AM / PM установлены на AM / PM. Windows покажет время в 24-часовом формате! Это, кажется, противоречивое определение, но проверка на «H» исправила мою ошибку.

...