具有倍数区域设置的Java日期格式区域设置问题

时间:2013-05-23 12:22:43

标签: java locale

我遇到了一个复杂的企业Web应用程序的问题,该应用程序已部署在法国分支机构中,现在也必须部署在该公司的德国分支机构中。 问题与基于服务器的语言环境的DateFormat的不同行为有关:

The Date for United States:
  In FULL is Tuesday, January 16, 2007
  In LONG is January 16, 2007
  In MEDIUM is Jan 16, 2007
  In SHORT is 1/16/07
The Date for United Kingdom:
  In FULL is 16 January 2007
  In LONG is 16 January 2007
  In MEDIUM is 16-Jan-2007
  In SHORT is 16/01/07
The Date for Germany:
  In FULL is Dienstag, 16. Januar 2007
  In LONG is 16. Januar 2007
  In MEDIUM is 16.01.2007
  In SHORT is 16.01.07
The Date for France:
  In FULL is mardi 16 janvier 2007
  In LONG is 16 janvier 2007
  In MEDIUM is 16 janv. 2007
  In SHORT is 16/01/07

现在该应用程序广泛使用:

 brch.setDate(DateFormat.getDateInstance(DateFormat.SHORT).parse("02/04/2013"));

以上似乎在法国和英国都有效,但是当它在德国部署时,所有的地狱都会崩溃,我们会收到大量的错误。 现在我知道我们可以用

指定Locale
 DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK)

然而,更改整个应用程序的代码需要数天和大量的测试,有没有办法全局指定此应用程序的默认语言环境?或者某种方式使应用程序与Locale无关,而不会改变太多的应用程序?

谢谢

1 个答案:

答案 0 :(得分:2)

  

有没有办法全局指定此应用程序的默认语言环境?

您可以在程序开头调用Locale.setDefault,强制使用它的所有内容的默认语言环境 - 包括DateFormat.getDateInstance

但是,无论如何,我强烈建议您重构代码。您所要做的就是更改当前使用DateFormat.getDateInstance的每个代码来调用您可以控制的实用程序方法。然后,随着需求的变化,您可以在一个地方集中更改行为。作为第一步,即使只是简单的搜索和替换,也许可以让你很容易地将它提取到受控类中的静态方法。

是的,这需要一些时间 - 但在此之后你会更好地

就个人而言,我建议如果你实际上有一个非常固定的格式,你明确指定 - 如果你知道总是 dd / MM / yyyy,我会使用:

DateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US);

...然后适当地设置时区。事实上,我使用的是Joda Time而不是其中任何一种,但这是另一回事。