Определить шаблон даты и времени на основе локали - PullRequest
5 голосов
/ 25 января 2011

У меня есть следующий код JSF для отображения даты с использованием определенного шаблона.

<f:convertDateTime pattern="E, d MMM, yyyy" timeZone="#{localeBean.timeZone}" />

Я также хотел бы передать шаблон этому через localeBean.Есть ли способ определить конкретный шаблон на основе локали?

public LocaleBean() {
  this.defaultTimeZone = TimeZone.getDefault();
  this.strLocale = Locale.getDefault().toString();
  this.timeZone = defaultTimeZone.getDisplayName();
}

Ответы [ 2 ]

6 голосов
/ 25 января 2011

f:convertDateTime предоставляет для этого атрибуты type, dateStyle и timeStyle, которые зависят от локали корня просмотра.

Предполагается, что Facelets:

<!DOCTYPE html>
<html lang="#{localeBean.language}"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view locale="#{localeBean.locale}">
    <h:head>
        <title>SO question 4792373</title>
    </h:head>
    <h:body>
        <h:outputText value="#{bean.date}">
            <f:convertDateTime type="date" dateStyle="short" />
        </h:outputText>
        <br />
        <h:outputText value="#{bean.date}">
            <f:convertDateTime type="date" dateStyle="medium" />
        </h:outputText>
        <br />
        <h:outputText value="#{bean.date}">
            <f:convertDateTime type="date" dateStyle="long" />
        </h:outputText>
        <br />
        <h:outputText value="#{bean.date}">
            <f:convertDateTime type="date" dateStyle="full" />
        </h:outputText>
    </h:body>
</f:view>
</html>

Вот как это выглядит с английским языком:

1/25/11
Jan 25, 2011
January 25, 2011
Tuesday, January 25, 2011

Немецкий:

25.01.11
25.01.2011
25. Januar 2011
Dienstag, 25. Januar 2011

Голландский:

25-1-11
25-jan-2011
25 januari 2011
dinsdag 25 januari 2011

Французский:

25/01/11
25 janv. 2011
25 janvier 2011
mardi 25 janvier 2011

и т. Д.

2 голосов
/ 25 января 2011

Вы можете попробовать DateFormat.getDateInstance. Пример:

   SimpleDateFormat f = (SimpleDateFormat)DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK);
   System.out.println(f.toPattern());

   f = (SimpleDateFormat)DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
   System.out.println(f.toPattern());

печать:

dd/MM/yy
M/d/yy
...