2013-03-25 11 views
14

Cosa sto cercando di fare:Perché il metodo getOffset() di joda DateTimeZone richiede un "istantaneo"?

Da un oggetto DateTimeZone, sto cercando di ottenere l'offset GMT in millisecondi. Esempio:

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 

oggetto DateTimeZone di Joda ha un metodo chiamato getOffset, che accetta un parametro. Domanda:

  1. perché questo metodo richiede un parametro? Mi sarei aspettato che il metodo non si aspettasse alcun parametro e si comportasse semplicemente come voglio il mio metodo fittizio "getOffsetSomehow()".
  2. Come posso ottenere gli oggetti del fuso orario sopra il mio snippet?
  3. Quale metodo/frammento di codice effettivo può ottenere i valori "offset" che cerco di ottenere?
+0

@jrharshanth Se stai ponendo la domanda; e se la risposta funziona per te; puoi accettare la risposta. –

+0

Mi piacerebbe anche conoscere la risposta a questo. Ho inizializzato e salvato un DateTimeZone usando 'DateTimeZone.forOffsetMillis (...)' in una parte della mia applicazione, e ora voglio recuperare l'offset di nuovo in modo che possa salvare il valore int o long in un database. Presumibilmente l'oggetto DateTimeZone sta memorizzando l'offset in uno dei suoi campi di istanza. Non c'è un modo ovvio per ottenere quei dati. – Aquarelle

risposta

12

Questo perché l'offset varia nel tempo. Un esempio è l'ora legale. Un altro è un paese che decide di trasferirsi in un altro fuso orario.

Se si desidera che l'offset corrente, basta consegnare la società in questo modo:

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

Il metodo getOffset() è un metodo astratto e non un metodo statico della classe DateTimeZOne. Quindi attraverso l'oggetto della classe DateTimeZone solo è possibile accedervi. ex. \t \t DateTimeZone DTZ = DateTimeZone.forID ("America/Port_of_Spain"); // America/New_York, Asia/Kolkata \t \t DateTimeZone.setDefault (DTZ); \t \t DateTime dt = new DateTime (2013, 3, 10, 3, 0, dtz); \t \t dtz.getOffset (dt.getMillis()); –

+0

Hai ragione, corretto il mio esempio. Tuttavia, la mia risposta rimane la stessa: si deve fornire un istante (alias punto nel tempo) quando si chiede un offset TZ, dal momento che cambia nel tempo –

0

2) È possibile ottenere l'oggetto TimeZone in questo modo - TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata"); Valore

3 È possibile ottenere compensati da questo metodo -

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) Non ho ricevuto la tua domanda.

Questo valore di offset sarà applicabile a Day light saving e non Day light saving country.

+0

È possibile inserire qualsiasi id stringa fuso orario valido invece di "Asia/Kolkata per ottenere il fuso orario È possibile utilizzare l'API di Joda Time per una maggiore facilità nel calcolo del fuso orario in Java –

+0

Se si utilizza DateTimZone di JodaTime Api, è necessario utilizzare il metodo statico di classe DateTimeZone.Avevo dato per scontato che si stia utilizzando Java.util. DateTime. –

+0

Se funziona, si prega di accettare la risposta –

Problemi correlati