Datetime 为不同地区保留相同的日期时间格式

Datetime 为不同地区保留相同的日期时间格式,datetime,jsf,internationalization,Datetime,Jsf,Internationalization,最近,我为我的JSF应用程序启动了内部化支持。一旦语言从en-US切换到de-AT,DateTime格式将相应更改(默认行为)。对于每个受支持的区域设置,保持相同的DateTime格式有什么快速解决方案吗 它应该是DateTimeConverter,还是设置的一部分(faces config.xml)?有多个选项 使用带有固定的locale属性的f:convertDateTime 使用带有固定的locale属性的f:convertDateTime格式化日期 <h:outputText va

最近,我为我的JSF应用程序启动了内部化支持。一旦语言从
en-US
切换到
de-AT
DateTime
格式将相应更改(默认行为)。对于每个受支持的区域设置,保持相同的
DateTime
格式有什么快速解决方案吗


它应该是
DateTimeConverter
,还是设置的一部分(
faces config.xml
)?

有多个选项

使用带有固定的
locale
属性的
f:convertDateTime
使用带有固定的
locale
属性的
f:convertDateTime
格式化日期

<h:outputText value="#{someBean.dateField}" >
    <f:convertDateTime pattern="..."
                       locale="#{applicationScopedBean.fixedLocale}" />
</h:outputText>
实现自定义转换器时,应该扩展
javax.faces.convert.DateTimeConverter
。如果您碰巧正在使用PrimeFaces,请扩展
org.PrimeFaces.convert.DateTimeConverter

现在只需硬编码语言环境(例如德语):

现在您可以像这样使用它(注意,视图区域设置设置为Dutch):


这将输出:

Mittwoch 2017年5月10日


有时解决方案很简单;-)最初考虑过这个解决方案,但我在应用程序中有数百个地方使用它。也许我会简单地用默认值扩展这个组件。我会选择查找和替换。我不能应用这个解决方案,我需要找到一种不同的方法来实现它。更改多个文件是违反SE原则的,我需要在后端找到一个地方来修改它。“SE原则”在您的组织中?
<converter>
  <converter-id>javax.faces.DateTime</converter-id>
  <converter-class>org.example.MyDateTimeConverter</converter-class>
</converter>
public class MyDateTimeConverter extends DateTimeConverter
{

  public MyDateTimeConverter()
  {
    setLocale(Locale.GERMAN);
  }

}
<f:view locale="nl">
  <h:outputText value="#{now}">
    <f:convertDateTime pattern="EEEEE dd MMMMM yyyy"/>
  </h:outputText>
</f:view>