Обнаружить AM / PM против 24-часового предпочтения часов из информации о локали Java? - PullRequest
6 голосов
/ 17 декабря 2010

Я ищу способ сказать в Java-программе, предпочитает ли конкретная локаль отображение времени в 12-часовом AM / PM или в 24-часовом формате. Теперь, как правило, я бы просто использовал DateFormat для правильного форматирования даты в соответствии с локалью. Тем не менее, я пытаюсь локализовать отображение календаря транзитных стволовых и створок, что требует некоторого непосредственного знания предпочтений локали. Вы можете увидеть пример расписания здесь:

http://onebusaway.org/where/standard/schedule.action?id=1_538

Какие-нибудь идеи о том, как я могу определить 12 часов AM / PM против 24 часов программно?

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

Вы можете проверить это следующим образом:

boolean hasAmPmClock(Locale locale) {
        DateFormat stdFormat = DateFormat.getTimeInstance(DateFormat.SHORT,
                Locale.US);
        DateFormat localeFormat = DateFormat.getTimeInstance(DateFormat.LONG,
                locale);
        String midnight = "";
        try {
            midnight = localeFormat.format(stdFormat.parse("12:00 AM"));
        } catch (ParseException ignore) {
        }
        return midnight.contains("12");
}
0 голосов
/ 26 февраля 2015

Я нашел другой способ, который немного менее окольный, чем принятый ответ:

DateFormat format;
// ...
boolean is24Hour;
if (format instanceof SimpleDateFormat) {
    SimpleDateFormat sdf = (SimpleDateFormat)format;
    String pattern = sdf.toPattern();
    is24Hour = !pattern.contains("a");
}

Все еще довольно грубый, и он не будет работать с другими DateFormat конкретными типами, но стандартными способами полученияDateFormat объект, кажется, возвращает SimpleDateFormat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...