android 2.2 で Calendar#setTimeZone が使えない問題と workaround

android 2.2 まで Calendar#setTimeZone メソッドや、Calendar.getInstance メソッドの引数による TimeZone の指定が正しく動作しないという問題がありました。

http://code.google.com/p/android/issues/detail?id=6184

より詳細には、何かしらの TimeZone を指定すると何故か GMT になります。何も指定しないと TimeZone#getDefault が利用されるのですが、それを利用した workaround が以下のコードスニペット

TimeZone timezone = ...;
Calendar cal;
synchronized (TimeZone.class.getClass()) {
  TimeZone tmp = TimeZone.getDefault();
  TimeZone.setDefault(timezone);
  cal = Calendar.getInstance();
  TimeZone.setDefault(tmp);
}

なんともいえませんね…