私のBlackBerryアプリでは、正確なタイムゾーンのサポートが必要です。 J2MEを実行するため、Joda Timeはオプションではありません。他の人の助けを借りて、私はJavaの組み込みのタイムゾーンサポートを私のために働かせる方法を考え出しましたが、夏時間から夏時間以外の間違いへのスイッチオーバーを依然として得ていることが判明しました。午前2時3月13日である2011年にJ2MEでのタイムゾーンの正確なサポート
TimeZone zone = TimeZone.getTimeZone("America/Los_Angeles");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(zone);
calendar.set(2011, Calendar.MARCH, 13, 1, 0, 0);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.set(2011, Calendar.MARCH, 13, 6, 0, 0);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.set(2011, Calendar.MARCH, 13, 23, 59, 59);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.set(2011, Calendar.MARCH, 14, 0, 0, 1);
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
スイッチオーバーのが、Javaは、3月14日の深夜にそれを持っている:あなたもJava 6の上で、それを自分で試すことができます。つまり、1日中ほぼ間違っているということです。それは容認できない。
私はthisに基づいて自分のtzdataパーサーを実装し、私のアプリでtzdataファイルを出荷しましたが、もっと良い方法があるのだろうかと思います。あなたはそれを知っていますか?私はこの問題に最初に遭遇することはできません。
私はほぼ同じミスをした:
これは修正されたコードです。 javadocのコメントには情報がありますが、メソッドのパラメータの奇妙なセットと 'millis'パラメータの名前は簡単にはなりません。 :) – vaughandroid