2011-09-02 9 views
15

Sto cercando di ottenere l'offset UTC in secondi in Android. Dato che l'emulatore continua a restituire 0, non posso dire se lo sto facendo correttamente o no.Come ottenere offset UTC in secondi in Android

Calendar c=Calendar.getInstance(); 
     TimeZone tz=c.getTimeZone(); 
     int offsetFromUtc=tz.getOffset(0)/1000; 

Quando inserisco 0 in tz.getOffset significa che voglio solo il numero di secondi da gmt. Fammi sapere se quello che sto facendo è corretto. Grazie

risposta

42

Le correzioni del fuso orario possono cambiare durante l'anno, forse il motivo più comune è l'ora legale. Invece di passare 0-TimeZone.getOffset() utilizza l'ora corrente per ottenere l'offset corrente, creare un nuovo Data e ottenere il suo valore Tempo:

TimeZone tz = TimeZone.getDefault(); 
Date now = new Date(); 
int offsetFromUtc = tz.getOffset(now.getTime())/1000; 

Le impostazioni predefinite emulatore per UTC, provare a controllare i fusi orari disponibili per testare. Inoltre puoi passare un fuso orario per impostare il fuso orario, check the documentation per -timezone.

+0

Ho dimenticato l'ora legale, grazie per l'avviso –

+0

Questo in realtà non è completo. Non tutti i fusi orari sono round hours, ci sono fusi orari frazionari come -4,5 per il Venezuela. Questo dovrebbe essere un float/double non un int. – Dev2rights

+2

[getOffset] (http://developer.android.com/reference/java/util/TimeZone.html#getOffset (long)) restituisce int con molta precisione per i fusi orari frazionari, fino al secondo. –

4

Il fuso orario predefinito dell'emulatore è GMT, il che significa che otterrai sempre un offset di 0. Il tuo codice sembra buono (non l'ho provato). Prova a cambiare il fuso orario del tuo emulatore con qualcos'altro e controlla il tuo codice. Dai un'occhiata a questo post aperto: Link