2012-03-18 10 views

Odpowiedz

1

do ustawiania strefy czasowej Programetically trzeba użyć Klasa Date. Zobacz dokumenty referencyjne here.

Należy użyć klasy setTimeZone() klasy .

Poniżej przykładowy kod dla ustawień strefy czasowej w zależności Ameryki

// 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

Czy Twoim zdaniem kod powinien działać, jeśli aplikacja nie ma uprawnień SET_TIME_ZONE? – Jake

+1

@Jake: Musi "działać". Wszystko, co robi, to ustawienie 'Strefy czasowej' dla twojego obiektu. To tak, jakby powiedzieć "int a = 43", nic, na czym system operacyjny się troszczy. Ustawienie globalne jest tym, na co potrzebujesz uprawnień, zobacz drugą odpowiedź. – maaartinus

+1

Ta odpowiedź pokazuje, jak ustawić strefę czasową na instancji SimpleDateFormat, a nie w systemie. Zobacz odpowiedź Dheeraj. – spaaarky21

14

Jeśli twoim celem jest, aby zmienić domyślną strefę czasową systemu, a następnie użyć setTimeZone() z AlarmManager.

+0

Dzięki! to działa. – herbertD

3

Można ustawić strefę czasową na wiele sposobów:

  1. Można użyć TimeZone.setDefault() który zmieni strefę czasową tylko dla bieżącego procesu. Ale, jak zauważono w dokumentach, nie gwarantuje się trwałości przez cały cykl życia aplikacji.

  2. Możesz użyć setTimeZone() z AlarmManager, aby zmienić Strefę Czasową całego urządzenia. Ale potrzebujesz zgody na "SET_TIME_ZONE".

Jeśli uważasz 1. jest niebezpieczny i nie ma zgody na 2. najlepszym podejściem jest, aby każdy dzień od Calendar i ustawić strefę czasową w kalendarzu instancji poprzez setTimeZone().

+0

To wstyd, że pierwsze rozwiązanie nie gwarantuje 100% skuteczności. Czy masz więcej informacji, w których przypadkach 'TimeZone.setDefault()' zostanie unieważnione lub nadpisane? Dokumentacja stwierdza tylko "Ta wartość może zostać wyczyszczona lub nadpisana w dowolnym momencie", ale dokumentacja nie wyjaśnia bardziej szczegółowo, kiedy to się stanie i dlaczego. –

+0

@StefanArn Przepraszamy, nie mam żadnych informacji. Ale podejrzewam, że może być modyfikowany przez system, jeśli urządzenie jest skonfigurowane do ustawiania daty i strefy czasowej przez sieć lub podobne źródła (np. GPS). – AlexS

Powiązane problemy