2013-03-25 4 views
14

私がやろうとしていること:joda DateTimeZoneのgetOffset()メソッドが「インスタント」を必要とするのはなぜですか?

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 

ジョダのDateTimeZoneをオブジェクトは、パラメータを受け入れるgetOffsetと呼ばれる方法があります。質問:

  1. なぜこのメソッドにパラメータが必要ですか?私はこのメソッドが任意のパラメータを期待しないことを期待していただけで、架空の "getOffsetSomehow()"メソッドをどのように振る舞うのかを単に振る舞います。
  2. 上記のスニペットでタイムゾーンオブジェクトを取得するにはどうすればよいですか?
  3. コードの実際の方法/スニペットは、私が取得しようとしている "オフセット"値を得ることができますか?
+0

@jrharshanth質問をしている場合は、答えがあなたのために働いている場合。あなたは答えを受け入れることができます。 –

+0

私はこれに対する答えも知りたいです。私は初期化し、私のアプリケーションの1つの部分で 'DateTimeZone.forOffsetMillis(...)'を使ってDateTimeZoneを保存しました。そして今、私はデータベースにintまたはlong値を保存できるようにオフセットをもう一度戻したいと思います。おそらく、DateTimeZoneオブジェクトはそのインスタンスフィールドの1つにオフセットを格納しています。そのデータを取得する明確な方法はありません。 – Aquarelle

答えて

12

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

現在はちょうどこのように、今では手、オフセットしたい場合:

int offset = DateTimeZone.forID("Europe/Berlin").getOffset(new DateTime()); 
System.out.println(offset); 
+0

getOffset()メソッドは、DateTimeZOneクラスの静的メソッドではない抽象メソッドです。したがって、DateTimeZoneクラスのオブジェクトを介してアクセスすることができます。例。 \t \t DateTimeZoneをDTZ = DateTimeZone.forID( "アメリカ/ Port_of_Spain"); //アメリカ/ニューヨーク、アジア/コルカタ \t \t DateTimeZone.setDefault(DTZ)。 \t \t DateTime dt =新しいDateTime(2013、3、10、3、0、dtz); \t \t dtz.getOffset(dt.getMillis()); –

+0

あなたが正しいです、私の例を修正しました。しかし、私の答えは変わっていません。時間が経つにつれて変化するので、TZオフセットを求めるときにインスタント(別名ポイント)を提供しなければなりません。 –

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)私はあなたの質問を受け取りませんでした。

このオフセット値は、デイライトセービングと非デイライトセービング国に適用されます。

+0

"Asia/Kolkata"の代わりに有効なタイムゾーン文字列idを入れることができます。あなたはJoda Time APIを使ってJavaの日付時間計算をより簡単に行うことができます –

+0

JodaTime APIのDateTimZoneを使用している場合は、DateTimeZoneクラス静的メソッドを使用する必要があります.Java.utilを使用していると仮定していました。 DateTime。 –

+0

あなたのために働いている場合は、答えを受け入れてください。 –

関連する問題