2017-01-27 7 views
1

私たちのプロジェクトは四半期のサポートが必要です。残念ながら、私たちはJava 1.7を使用しており、不幸な理由でそれに固執しています。ICU4j奇妙な結果を返すSimpleDateFormatter

内部で提供されているSimpleDateFormatを使用するためにICU4jライブラリを追加しました。

残念ながら、それは非常に奇妙な日付を解析しています(下記参照)。どんな助けもありがとう。

val formatter = new java.text.SimpleDateFormat("yyyy") 
    val formatter2 = new com.ibm.icu.text.SimpleDateFormat("yyyy") 
    Array(formatter2.parse("1234"), formatter.parse("1234")) 

結果

0 = {[email protected]} "Sun Jan 01 00:00:00 PST 1234" 
1 = {[email protected]} "Sun Jan 01 00:12:28 PST 1234" 

私は広範囲にドキュメントを読みますが、なぜそれがオフセットして解析していることを確認していません。私はそれがapiの一部であり、誰かが私の困難を説明できることを願っています。どんな助けもありがとう。タイムゾーンの問題について

http://www.icu-project.org/apiref/icu4j/com/ibm/icu/text/SimpleDateFormat.html

答えて

0

はおそらくtimezone data/rules of ICU4JとあなたのJava-7-JVMあなたは右、1900年の後に使用する必要があります年1234通常のために異なっていますか?そうであれば、同じルールを得る確率ははるかに高い。もしそうでなければ、正しいバージョンを選ぶことに本当に気を配り、同じルールを持つようにする必要があります。場合によっては、Oracleのtzupdater-toolも適用する必要があります。 ICU4Jを使用する唯一の理由は、のためにサポートであれば、とにかくcom.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDK

:ゾーンに関する

更新:OPの良い研究に

おかげで、我々はsystem property specific for ICU4Jを設定することができます代替案もあります。

私のライブラリTime4J(Java-6 + 7ではv3.xライン実行可能)を使用しています。また、ICU4Jがするように、またpattern doc

または

を使用して見る同じCLDRデータに基づいて良い国際化を含む(ないJava-8で何java.timeに近い)四半期下のサイズによってサポートし、より良いAPIを提供していますThreeten-Backport(ローカライズされたデータがないと国際化されないという欠点があります)。

+1

あなたは正しいです!助けてくれてありがとう。私はすべての私の問題を解決したプロパティcom.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDKを設定できることを発見しました。提案とライブラリをありがとう。彼らは本当に役に立つと分かった。 – chapmatic

+0

@chapmatic ICU4Jのこの特別なシステムプロパティについて聞いてみると面白いです。新しいことを学んだ。 –