2013-03-25 12 views
14

Co próbuję zrobić:Dlaczego metoda getOffset() joda DateTimeZone wymaga "natychmiastowego"?

Z obiektu DateTimeZone, próbuję uzyskać przesunięcie GMT w milisekundach. Przykład:

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 w DateTimeZone obiekt ma metodę zwaną getOffset, który przyjmuje parametr. Pytanie:

  1. dlaczego ta metoda wymaga parametru? Spodziewałbym się, że metoda nie oczekuje żadnego paramu i po prostu zachowuję się jak chcę mojej fikcyjnej metody "getOffsetSomehow()".
  2. Jak mogę pobrać obiekty strefy czasowej do mojego fragmentu powyżej?
  3. Którą rzeczywistą metodę/fragment kodu mogę uzyskać wartości "przesunięcia", które próbuję uzyskać?
+0

@jrharshanth Jeśli stawiasz pytanie; i jeśli odpowiedź działa dla ciebie; możesz zaakceptować odpowiedź. –

+0

Chciałbym znać odpowiedź na to również. Zainicjowałem i zapisałem DateTimeZone przy użyciu 'DateTimeZone.forOffsetMillis (...)' w jednej części mojej aplikacji, a teraz chcę uzyskać przesunięcie z powrotem, aby móc zapisać int lub długą wartość w bazie danych. Można przypuszczać, że obiekt DateTimeZone przechowuje przesunięcie w jednym z jego pól instancji. Nie ma oczywistego sposobu na uzyskanie tych danych. – Aquarelle

Odpowiedz

12

Jest tak, ponieważ przesunięcie zmienia się w czasie. Jednym z przykładów jest czas letni. Innym jest kraj decydujący się na przejście do innej strefy czasowej.

Jeśli chcesz prąd przesunięcia, po prostu oddać się teraz tak:

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

Metoda getOffset() jest metodą abstrakcyjną, a nie statyczną metodą klasy DateTimeZOne. Tak więc tylko obiekt klasy DateTimeZone może być dostępny. dawny. \t \t DateTimeZone DTZ = DateTimeZone.forID ("America/Port_of_Spain"); // Ameryka/New_York, Azja/Kalkuta \t \t DateTimeZone.setDefault (DTZ); \t \t DateTime dt = new DateTime (2013, 3, 10, 3, 0, dtz); \t \t dtz.getOffset (dt.getMillis()); –

+0

Masz rację, poprawiono mój przykład. Jednak moja odpowiedź pozostaje niezmienna: należy podać moment (w momencie), prosząc o przesunięcie TZ, ponieważ zmienia się ono z czasem –

0

2) Można uzyskać obiektu TimeZone w ten sposób - TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");

3 można dostać offsetowej wartość o tej metodzie -

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) Nie dostałem twojego pytania.

Ta wartość korekcji będzie obowiązywać dla kraju, w którym zapisywane są światła dzienne, a nie dzienne.

+0

Możesz wstawić dowolny poprawny identyfikator ciągu strefy czasowej zamiast "Azja/Kolkata, aby uzyskać strefę czasową Możesz użyć Joda Time API dla większej łatwości obliczania czasu w Jawie –

+0

Jeśli używasz DateTimZone z JodaTime Api, musisz użyć metody statycznej klasy DateTimeZone, a założyłem, że używasz Java.util. DateTime: –

+0

Jeśli to działa, zaakceptuj odpowiedź: –

Powiązane problemy