我遇到了一个复杂的企业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无关,而不会改变太多的应用程序?
谢谢
答案 0 :(得分:2)
有没有办法全局指定此应用程序的默认语言环境?
您可以在程序开头调用Locale.setDefault
,强制使用它的所有内容的默认语言环境 - 包括DateFormat.getDateInstance
。
但是,无论如何,我强烈建议您重构代码。您所要做的就是更改当前使用DateFormat.getDateInstance
的每个代码来调用您可以控制的实用程序方法。然后,随着需求的变化,您可以在一个地方集中更改行为。作为第一步,即使只是简单的搜索和替换,也许可以让你很容易地将它提取到受控类中的静态方法。
是的,这需要一些时间 - 但在此之后你会更好地 。
就个人而言,我建议如果你实际上有一个非常固定的格式,你明确指定 - 如果你知道总是 dd / MM / yyyy,我会使用:
DateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
...然后适当地设置时区。事实上,我使用的是Joda Time而不是其中任何一种,但这是另一回事。