@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

BackendのCalendarインスタンスを日本時間にする

Google App EngineのBackendで処理をしようと思いました。
日本時間の何時に起動するかはcron.xmlに定義しますね。

  <cron>
    <url>/hoge/fuga</url>
    <description>HogeFuga</description>
    <schedule>everyday 09:00</schedule>
    <timezone>Asia/Tokyo</timezone>
    <target>backend</target>
  </cron>

起動後に検索したEntityのDate型のプロパティと日本時間での比較を行いたく、Calendar.getInstance()で取得した日付を用いました。
しかし、日本時間では取得できませんでした。まぁ、それはそうですね。
そこで、ロケールタイムゾーンを指定すべく、次のようにしましたが、ダメでした。

Calendar now1 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));
Calendar now2 = Calendar.getInstance(Locale.JAPAN);
Calendar now3 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"), Locale.JAPAN);

悩んだ挙句にたどり着いたのが、次の方法です。

Calendar now = Calendar.getInstance();
now.add(Calendar.HOUR_OF_DAY, TimeZone.getTimeZone("Asia/Tokyo").getRawOffset() / 3600000);

もっと良い方法があればいいな。