2012-11-07 9 views
5

Mam dwa urządzenia HTC z Androidem 2.3.5 i Samsung z 2.3.6 teraz problem z którym stoję to Potrzebuję daty tygodnia w miesiącu.Kalendarz.WEEK_OF_MONTH daje różne wyniki na dwóch różnych urządzeniach

Więc napisałem ten kod i zainstalowałem na obu telefonach. i ustawić datę systemową jako

27-ga Jan 2013

Calendar calendar = Calendar.getInstance(); 
    int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH); 
    Log.i(TAG,"weekOfMonth = "+weekOfMonth); 

teraz na HTC wyjście jest

weekOfMonth = 5 

podczas Samsung pracuje ten sam kod produkuje

weekOfMonth = 4 

to ponowne sojusznik wkręca moją logikę n obliczeń.

Czy robię coś nie tak?

+0

Gdzie jest kod gdzie ustawiono datę systemową? To najważniejszy fragment kodu tutaj. Co ważniejsze, czy masz dokładnie ten sam kod lub czy jest miejsce na różnice? – HXCaine

+0

Uważam, że kalendarz jest zależny od regionu i strefy czasowej. Czy Twoje dwa urządzenia są zarejestrowane w różnych strefach czasowych lub ustawieniach regionalnych? Jeśli czas jest ustawiony w milisekundach, to jest możliwe, że strefa czasowa sprawia, że ​​jest inny dzień. W razie wątpliwości użyj JodaTime http://joda-time.sourceforge.net/ – BoredAndroidDeveloper

+0

Jedno urządzenie może również mieć poniedziałek jako początek tygodnia, ponieważ 27 jest niedzielą. – Eric

Odpowiedz

10

Jest to prawdopodobnie spowodowane Locales. W Javie

 Calendar calFr = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"), Locale.FRANCE); 
     Calendar calUs = Calendar.getInstance(TimeZone.getTimeZone("US/Eastern"), Locale.US); 
     Calendar calUk = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.UK); 
     calFr.set(2013, Calendar.JANUARY, 27); 
     calUs.set(2013, Calendar.JANUARY, 27); 
     calUk.set(2013, Calendar.JANUARY, 27); 

     int weekOfMonthFr = calFr.get(Calendar.WEEK_OF_MONTH); 
     int weekOfMonthUs = calUs.get(Calendar.WEEK_OF_MONTH); 
     int weekOfMonthUk = calUk.get(Calendar.WEEK_OF_MONTH); 
     System.out.println("France week of month is " + weekOfMonthFr); 
     System.out.println("USA week of month is " + weekOfMonthUs); 
     System.out.println("UK week of month is " + weekOfMonthUk); 

daje

France week of month is 4 
USA week of month is 5 
UK week of month is 4 
+0

ohh super ... dzięki za wsparcie. Dam ci znać. –

+0

Rozwiązano ten kod dzięki ... Kalendarz cal = Calendar.getInstance (TimeZone.getDefault(), Locale.US); cal.setFirstDayOfWeek (Calendar.SUNDAY); –

+0

Dzięki człowieku. Uratowałeś mi życie... :) –

0

Podwójne sprawdzenie roku, w którym jest ustawiony, jeśli jest ustawiony na rok 2012, a drugi rok 2013, który wyjaśniałby różnicę.

Czy otrzymasz wniosek o zarejestrowanie daty przechowywanej w obiekcie kalendarza i opublikowanie go tutaj, aby upewnić się, że mają poprawne informacje.

Powiązane problemy