我正在尋找一組命令行參數,這些命令行參數將允許我爲java應用程序強制一組特定的區域設置。如何更改Java中的默認語言環境設置以使其一致?
假設我無法修改應用程序,所以我必須使用java -Dmy.prop="value"
來設置屬性。
我正在專門尋找更改日期/時間格式以使其符合ISO-8601(軍事時間),但我無法找到適當的屬性。
我正在尋找一組命令行參數,這些命令行參數將允許我爲java應用程序強制一組特定的區域設置。如何更改Java中的默認語言環境設置以使其一致?
假設我無法修改應用程序,所以我必須使用java -Dmy.prop="value"
來設置屬性。
我正在專門尋找更改日期/時間格式以使其符合ISO-8601(軍事時間),但我無法找到適當的屬性。
不錯,我很感興趣的是同一件事,但到目前爲止我只有一個部分解決:
user.timezone=UTC
user.country=CA
user.variant=
user.language=en
file.encoding=utf8
您可以使用加拿大,因爲它使用ISO 8601格式的國家之一。
你寫了「部分」 - 這個問題的哪部分*不解決? – 2010-09-18 12:45:30
它不強制執行格式的日期/時間 – 2010-09-18 12:51:53
它應該,但我試過它在哈德遜,它並沒有改變它。現在取決於應用程序如何進行格式化,如果開發人員使用硬編碼格式,則不會期望出現奇蹟。 – sorin 2010-09-18 13:54:17
我懷疑這個問題的正確解決方案是提供一個新的Locale
變體,如(例如)en_US_mil
。
<language code>[_<country code>[_<variant code>]]
這可以通過java.util.spi和java.text.spi服務機制,實現類來完成。
此主題是mentioned的ICU website。
設置默認Java語言環境設置的推薦方法是通過shell /操作系統語言環境設置進行設置。例如,在UNIX/LINUX上,默認語言環境由環境變量確定。
以下信息是從Java Internationalization FAQ:
我可以設置默認語言環境的應用程序之外?
這取決於您正在使用的Java平臺的實現 。 初始默認語言環境通常是 ,由主機操作 系統的語言環境確定。版本1.4和 Sun的JRE的更高版本允許您通過從命令行設置user.language, user.country和user.variant系統 屬性來覆蓋 。對於 例如,要選擇區域設置( 「日」, 「TH」, 「TH」)作爲初始默認語言環境, 可以使用:
的java -Duser.language =第 -Duser.country = TH -Duser.variant = TH MainClass
由於並非所有運行時環境 都提供此功能,因此應僅使用 進行測試。
編輯
問題問這樣的:
我期待特意更改日期時間格式,使之ISO-8601標準(軍用時間),但我不能夠爲此找到適當的禮節。
你似乎是要選擇性地忽略某些方面當前的區域設置的,而不是完全改變它。這樣做的簡單方法是讓應用程序完成工作;即使用指定的日期格式而不是當前語言環境給出的默認格式。但是,如果應用程序是封閉源代碼,則可能無法更改它。
它可能有可能解決這個有以下方法:
最後,如果應用程序沒有使用locale機制來決定使用什麼日期格式,基於改變的任何變化區域設置將不起作用。
這仍然需要JVM支持語言環境:http: //download.oracle.com/javase/6/docs/technotes/guides/intl/locale.doc.html#util-text – McDowell 2010-09-18 15:59:44
以上鍊接已過時。 – 2013-03-07 15:43:55
如果您擁有該代碼,則只需在main()方法中調用Locale.setDefault()即可。但我認爲你正在攻擊不正確的問題。應用程序應顯示根據用戶的區域設置格式化的時間,數字和其他與文化相關的信息。如果不是,這個問題應該修復。 BTW。有些類不是區域敏感的,所以它們會從toString()方法打印不變的值。更改區域設置不會改變這種行爲。 – 2010-09-18 12:45:03
即使您無法修改應用程序,仍然可以創建一個啓動器類,將默認設置設置爲您需要的任何類型,然後調用應用程序的主類。 – 2010-09-18 13:03:11