根据语言环境确定日期时间格式

5
我有以下JSF代码用于显示一个特定格式的日期。
<f:convertDateTime pattern="E, d MMM, yyyy" timeZone="#{localeBean.timeZone}" />

我希望您可以通过localeBean将模式传递给它。 是否有一种方法可以根据locale确定特定的模式?
public LocaleBean() {
  this.defaultTimeZone = TimeZone.getDefault();
  this.strLocale = Locale.getDefault().toString();
  this.timeZone = defaultTimeZone.getDisplayName();
}
2个回答

6

f:convertDateTime提供了typedateStyletimeStyle属性,取决于视图根的语言环境。

假设使用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
你可以尝试使用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

我该如何使用这个来包括24小时制的时间和AM或PM指示器?M/d/yy HH:mm AM/PM? - Thomas Buckley
你可以将其附加到模式中,例如 pattern = f.toPattern() + "HH:mm a" - dogbane
太好了,非常有效。感谢dogbane。也感谢Balus C,我不确定声望是如何分享的?能否给一个人2/3的分数,另一个人1/3的分数? - Thomas Buckley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接