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

如何更改Java中的默认语言环境设置以使其一致?,java,internationalization,properties,Java,Internationalization,Properties,我正在寻找一组命令行参数,这些参数允许我为java应用程序强制设置一组特定的语言环境设置 假设我无法修改应用程序,因此必须使用java-Dmy.prop=“value”设置属性 我特别希望更改日期/时间格式,使其符合ISO-8601(军事时间),但我无法找到相应的属性。很好,我对同样的事情感兴趣,但到目前为止,我只有一个部分解决方案: user.timezone=UTC user.country=CA user.variant= user.language=en file.encoding=ut

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

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


我特别希望更改日期/时间格式,使其符合ISO-8601(军事时间),但我无法找到相应的属性。

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

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

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

我认为解决此问题的正确方法是提供一个新的
语言环境
变体,例如
en\u US\u mil

<language code>[_<country code>[_<variant code>]]

这可以通过和服务机制实现类来实现


本主题位于上。

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

以下信息来自:

我可以在应用程序外部设置默认区域设置吗?

这取决于《公约》的执行情况 您正在使用的Java平台。这个 初始默认区域设置通常为 根据主机运行状态确定 系统的区域设置。版本1.4和 更高级别的Sun JRE允许您覆盖 通过设置user.language, user.country和user.variant系统 命令行中的属性。对于 例如,要选择区域设置(“th”、“th”, “TH”)作为初始默认语言环境, 您可以使用:

java-Duser.language=th -Duser.country=TH-Duser.variant=TH主类

因为不是所有的运行时环境 提供此功能时,应仅 用于测试

编辑

问题是:

我特别希望更改datetime格式,使其符合ISO-8601标准(军事时间),但我无法找到合适的方法

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

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

  • 了解Java如何将语言环境三元组(country/language/variant)解析为语言环境对象
  • 对于您需要支持的每个语言环境,对现有语言环境类(etc)进行子类化,以实现使用ISO日期/时间格式的新变体
  • 创建一个包含自定义类或资源的JAR,并将其添加到类路径中。(您可能需要将JAR添加到bootclasspath中,等等,以使其正常工作)

最后,如果应用程序没有使用区域设置机制来决定使用哪种日期格式,则基于区域设置的任何更改都不会产生任何影响。

如果您拥有代码,则只需在main()方法中调用locale.setDefault()。但我认为你们攻击的是错误的问题。应用程序应该根据用户的区域设置显示时间、数字和其他与区域性相关的信息。如果不是,则应修复此问题。顺便说一句,有些类对区域设置不敏感,因此它们将打印来自toString()方法的不变值。更改区域设置不会改变此行为。即使您无法修改应用程序,您仍然可以创建一个启动器类,将默认值设置为您需要的任何值,然后调用应用程序的主类。您编写了“部分”-这不能解决问题的哪一部分?应该,但我在哈德逊河上试过,但没有改变。现在取决于应用程序是如何进行格式化的,如果开发人员使用硬编码格式化,您不能期望奇迹出现。Sbarnea-更改JVM特定的
文件。编码
系统属性会导致未定义的行为:这仍然需要JVM支持区域设置: