14

私がやろうとしていること:

DateTimeZoneオブジェクトから、GMTオフセットをミリ秒単位で取得しようとしています。例:

DateTimeZone gmt= // somehow get gmt zone object
long offset = gmt.getOffsetSomehow(); // expect offset = 0

DateTimeZone ny_est = // somehow get that time zone object representing "EST" offset of NY zone
long offset = ny_est.getOffsetSomehow(); // expect offset = -18000000 = -5*60*60*1000

DateTimeZone hkt = // somehow get HK time zone object
long offset = hkt.getOffsetSomehow(); // expect offset = 28800000 = 8*60*60*1000

JodaのDateTimeZoneオブジェクトには、パラメーターを受け入れるgetOffsetというメソッドがあります。質問:

  1. そのメソッドにパラメータが必要なのはなぜですか?このメソッドはパラメータを期待せず、架空の「getOffsetSomehow()」メソッドのように動作することを期待していました。
  2. 上記のスニペットでタイムゾーンオブジェクトを取得するにはどうすればよいですか?
  3. 取得しようとしている「オフセット」値を取得できる実際のメソッド/コードスニペットはどれですか?
4

2 に答える 2

13

これは、オフセットが時間とともに変化するためです。一例は夏時間です。もう1つは、別のタイムゾーンに移動することを決定した国です。

現在のオフセットが必要な場合は、次のように入力してください。

int offset = DateTimeZone.forID("Europe/Berlin").getOffset(new DateTime());
System.out.println(offset);
于 2013-03-25T10:23:13.353 に答える
0

2)この方法でTimeZoneオブジェクトを取得できます-TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");

3この方法でオフセット値を取得できます-

double timezoneval = 0.0;
        Calendar cal = Calendar.getInstance();
        cal.set(2013, 3, 25, 10, 0,0);
        TimeZone tz = TimeZone.getDefault();
        boolean t = tz.inDaylightTime(cal.getTime());
        if (t)
            timezoneval = ((TimeZone.getDefault().getRawOffset())
                    / (60 * 60 * 1000D) + (TimeZone.getDefault()
                    .getDSTSavings() / (60 * 60 * 1000D)));
        else
            timezoneval = ((TimeZone.getDefault().getRawOffset()) / (60 * 60 * 1000D));

1)質問がありませんでした。

このオフセット値は、夏時間および非夏時間の国に適用されます。

于 2013-03-25T11:18:26.690 に答える