开发者

How do I change the default locale settings in Java to make them consistent?

I'm looking for a set of command line parameters that will allow me to force a specific set of locale settings for a java application.

Let's say that I'm not able to modify the application, so I have to set the properties using ja开发者_Python百科va -Dmy.prop="value".

I'm looking specially to change the date/time format to make it ISO-8601 compliant (military time), but I was not able to find the proper properties for this.


I suspect that the correct solution to this problem would be to provide a new Locale variant such as (for example) en_US_mil.

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

This can be done by implementing classes via the java.util.spi and java.text.spi service mechanisms.

This topic is mentioned on the ICU website.


The recommended way to set the default Java locale settings is to do it via the shell / operating system locale settings. For example, on UNIX / LINUX the default locale is determined by environment variables.

The following information is from the Java Internationalization FAQ:

Can I set the default locale outside an application?

This depends on the implementation of the Java platform you're using. The initial default locale is normally determined from the host operating system's locale. Versions 1.4 and higher of Sun's JREs let you override this by setting the user.language, user.country, and user.variant system properties from the command line. For example, to select Locale("th", "TH", "TH") as the initial default locale, you would use:

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

Since not all runtime environments provide this feature, it should only be used for testing.

EDIT

The question asks this:

I'm looking specially to change the datetime format to make it ISO-8601 compliant (military time), but I was not able to find the proper proprieties for this.

You appear to be want to selectively override certain aspects of the current locale, rather than change it entirely. The simple way to do this is to have the application do the work; i.e. use a specified date format rather than the default format given by the current locale. But if the application is closed source, you may not have the option of changing it.

It might be possible to work around this with the following approach:

  • Figure out how Java implements the resolution of locale triples (country/language/variant) to locale objects.
  • For each locale that you need to support, subclass the existing locale classes (etc) to implement a new variant that uses ISO date/time formats.
  • Create a JAR containing your custom classes or resources, and add it to the classpath. (You might need to add the JAR to the bootclasspath, etc to get this to work)

Finally, if the application is not using the locale mechanisms to decide what date format to use, any changes based on changing the locale will have no effect.


Nice, i was interested about the same thing but so far I have only a partial solution:

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

You can use Canada, because it one of the countries using the ISO 8601 format.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜