2011-09-02 12 views
15

Próbuję uzyskać przesunięcie UTC w sekundach w systemie Android. Ponieważ emulator powraca do 0, nie mogę stwierdzić, czy robię to poprawnie, czy też nie.Jak uzyskać przesunięcie UTC w sekundach w Androidzie

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

Po umieszczeniu 0 w tz.getOffset oznacza to, że chcę tylko liczbę sekund od gmt. Daj mi znać, jeśli to, co robię, jest poprawne. Dzięki

Odpowiedz

42

Przesunięcia strefy czasowej mogą się zmieniać w ciągu roku, prawdopodobnie najczęstszym powodem jest czas letni. Zamiast przechodzenia 0 do TimeZone.getOffset() używa bieżącego czasu, aby prąd przesunięcia, należy utworzyć nową datę w celu uzyskania jej wartość czasowa:

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

Domyślne Emulator UTC, spróbuj sprawdzania dostępnych stref czasowych, aby przetestować. Możesz także przekazać przełącznik strefy czasowej, aby ustawić strefę czasową, check the documentation dla -timezone.

+0

Zapomniałem o oszczędnościach w świetle dziennym, dziękuję za heads up –

+0

To nie jest kompletne. Nie wszystkie strefy czasowe są okrągłymi godzinami, istnieją ułamkowe strefy czasowe, takie jak -4,5 dla Wenezueli. Powinno to być float/double, a nie int. – Dev2rights

+2

[getOffset] (http://developer.android.com/reference/java/util/TimeZone.html#getOffset (long)) zwraca int z dużą precyzją dla ułamkowych stref czasowych, aż do sekundy. –

4

Domyślną strefą czasową emulatora jest GMT, co oznacza, że ​​zawsze otrzymasz przesunięcie o wartości 0. Twój kod wygląda dobrze (nie wypróbowałem go). Spróbuj zmienić strefę czasową swojego emulatora na coś innego i sprawdź kod. Spójrz w tym otwartym poście: Link

Powiązane problemy