2012-03-18 11 views

risposta

1

Per l'impostazione del fuso orario In ordine programmatico è necessario utilizzare la classe Data. Vedere i documenti di riferimento here.

È necessario utilizzare il metodo setTimeZone() della classe SimpleDateFormat.

seguito è il codice di esempio per le impostazioni di fuso orario di base in America

// First Create Object of Calendar Class 
Calendar calendar = Calendar.getInstance();   
// Now Set the Date using DateFormat Class 
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss z"); 
// Finally Set the time zone using SimpleDateFormat Class's setTimeZone() Method 
sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); 
+0

Secondo la tua opinione, il codice dovrebbe funzionare se l'applicazione non dispone dell'autorizzazione SET_TIME_ZONE? – Jake

+1

@Jake: Deve "funzionare". Tutto ciò che fa è impostare il 'TimeZone' per un tuo oggetto. È come dire "int a = 43", niente a cui interessa il sistema operativo. L'impostazione globale è ciò di cui hai bisogno per le autorizzazioni, vedi l'altra risposta. – maaartinus

+1

Questa risposta mostra come impostare il fuso orario su un'istanza SimpleDateFormat, non sul sistema. Vedi la risposta di Dheeraj. – spaaarky21

14

Se il vostro obiettivo è quello di cambiare fuso orario predefinito del sistema, quindi utilizzare setTimeZone() di AlarmManager.

+0

Grazie! questo funziona – herbertD

3

È possibile impostare il fuso orario in diversi modi:

  1. È possibile utilizzare TimeZone.setDefault() che cambierà il fuso orario per solo il processo in corso. Ma come indicato nei documenti, questo non è garantito per durare per l'intero ciclo di vita dell'applicazione.

  2. È possibile utilizzare setTimeZone() di AlarmManager per modificare il fuso orario dell'intero dispositivo. Ma è necessario il "SET_TIME_ZONE" -permission per quello.

Se pensate 1. è di pericoloso e non hai il permesso per 2. la tua miglior approccio è quello di ottenere ogni data da Calendar e impostare il fuso orario sul calendario istanza tramite setTimeZone().

+0

È un peccato che la prima soluzione non sia garantita per funzionare al 100%. Avete ulteriori informazioni in quali casi "TimeZone.setDefault()" viene invalidato o sovrascritto? La documentazione indica solo "Questo valore può essere cancellato o sovrascritto in qualsiasi momento", ma la documentazione non chiarisce più in dettaglio quando ciò accadrà e perché. –

+0

@StefanArn Spiacente, non ho alcuna informazione presente. Ma ho il sospetto che possa essere modificato dal sistema, se il dispositivo è configurato per impostare la data e il fuso orario da una rete o da fonti simili (ad esempio GPS). – AlexS

Problemi correlati