2012-10-26 18 views
5

Java: Timezone why different timezone give same value in millisecKalendarz getTimeInMillis() jest zależny od strefy czasowej?

odnosząc się do powyższego linku mam przypuszczać, że getTimeInMillis() z kalendarza klasa zwraca liczbę milisekund, niezależnie od strefy czasowej.

ale stosując następujący kod:

Calendar cal = Calendar.getInstance(); 
int dateInSeconds = (int)(cal.getTimeInMillis()/1000); 
Log.i("TIME IN SECONDS: ",""+dateInSeconds); 

próbował, na początku, aby ustawić mój zegar systemowy do 10:00 GMT + 02: 00

produkuje pewną liczbę wyjściową. Ale ustawienie zegara systemowego na 10:00 i GMT + 00: 00

wyjściowy numer jest około 7200 większy niż poprzedni przypadek, który odpowiada około 2 godzin.

Dlaczego?

Odpowiedz

9

Dla uzyskania liczbę milisekund niezależne strefy czasowej Znalazłem następujące rozwiązanie

Zamiast:

int dateInSeconds = (int)(cal.getTimeInMillis()/1000); 

używać:

int dateInSeconds = (int)((cal.getTimeInMillis()+cal.getTimeZone().getOffset(cal.getTimeInMillis()))/1000); 

to działa dobrze dla mnie.

6

Otrzymujesz to źle. getTimeInMillis()będzie daje niezależną czasowej strefy czasowej. Jeśli zmienisz strefę czasową na zegarze komputera, ale nadal pozostanie ten sam wyświetlany czas, zmienisz czas niezależnie od strefy czasowej. Dlatego powinieneś/powinnaś używać , a nie używać podanego przez ciebie kodu, ani nikogo innego, kto to czyta.

+0

Wynik kalendarza getTimeInMillis() zależy od kalendarza.ZONE_OFFSET ... – marcolopes