如何更改Java中的默认语言环境设置以使它们保持一致?

我正在寻找一组命令行参数,这些参数允许我强制为java应用程序设置一组特定的语言环境设置。

假设我无法修改应用程序,因此我必须使用java -Dmy.prop="value"设置属性。

我正在寻找特别改变日期/时间格式以使其符合ISO-8601(军事时间),但我无法找到适当的属性。

很好,我对同样的事情感兴趣,但到目前为止我只有一个部分解决方案

 user.timezone=UTC user.country=CA user.variant= user.language=en file.encoding=utf8 

您可以使用加拿大,因为它是使用ISO 8601格式的国家之一。

我怀疑这个问题的正确解决方案是提供一个新的Locale变体,例如(例如) en_US_mil

 [_[_]] 

这可以通过java.util.spi和java.text.spi服务机制实现类来完成。

ICU网站上提到了这个主题。

设置默认Java语言环境设置的推荐方法是通过shell /操作系统语言环境设置来完成此操作。 例如,在UNIX / LINUX上,默认语言环境由环境变量确定。

以下信息来自Java国际化常见问题解答 :

我可以在应用程序外部设置默认语言环境吗?

这取决于您正在使用的Java平台的实现。 初始缺省语言环境通常由主机操作系统的语言环境确定。 Sun的JRE 1.4及更高版本允许您通过从命令行设置user.language,user.country和user.variant系统属性来覆盖它。 例如,要选择Locale(“th”,“TH”,“TH”)作为初始默认语言环境,您将使用:

java -Duser.language = th -Duser.country = TH -Duser.variant = TH MainClass

由于并非所有运行时环境都提供此function,因此它只应用于测试。

编辑

问题是:

我正在寻找特别改变日期时间格式以使其符合ISO-8601(军事时间),但我无法为此找到合适的礼节。

您似乎希望有选择地覆盖当前区域设置的某些方面 ,而不是完全更改它。 这样做的简单方法是让应用程序完成工作; 即使用指定的日期格式而不是当前语言环境给出的默认格式。 但如果应用程序是封闭源代码,您可能无法更改它。

可以通过以下方法解决此问题:

  • 弄清楚Java如何实现区域设置三元组(国家/语言/变体)到区域设置对象的解析。
  • 对于您需要支持的每个语言环境,将现有语言环境类(等)子类化以实现使用ISO日期/时间格式的新变体。
  • 创建包含自定义类或资源的JAR,并将其添加到类路径中。 (您可能需要将JAR添加到bootclasspath等,以使其工作)

最后,如果应用程序未使用区域设置机制来决定使用哪种日期格式,则基于更改区域设置的任何更改都将不起作用。