2012-11-07 51 views
5

Tôi có hai thiết bị HTC với Android 2.3.5 và Samsung với 2.3.6 hiện tại vấn đề tôi đang gặp phải là tôi cần tuần của tháng.Lịch.WEEK_OF_MONTH cho kết quả khác nhau trên hai thiết bị khác nhau

Vì vậy, tôi đã viết mã này và được cài đặt trên cả hai điện thoại. và thiết lập ngày hệ thống như

27th Jan 2013

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

bây giờ HTC đầu ra là

weekOfMonth = 5 

trong khi trên samsung chạy cùng mã sản xuất

weekOfMonth = 4 

lần này đồng minh đang vặn các tính toán logic của tôi trước.

Tôi đang làm gì sai?

+0

đâu là mã mà bạn đã thiết lập ngày hệ thống? Đó là đoạn mã quan trọng nhất ở đây. Quan trọng hơn, bạn đang chạy chính xác cùng một mã hoặc là có chỗ cho sự khác biệt? – HXCaine

+0

Tôi tin rằng lịch là miền địa phương và múi giờ phụ thuộc. Hai thiết bị của bạn có được đăng ký với múi giờ hoặc ngôn ngữ khác nhau không? Nếu thời gian được đặt theo mili giây thì có thể múi giờ biến nó thành một ngày khác. Khi nghi ngờ sử dụng JodaTime mặc dù http://joda-time.sourceforge.net/ – BoredAndroidDeveloper

+0

Một thiết bị cũng có thể có thứ hai là bắt đầu của tuần, kể từ ngày 27 là một chủ nhật. – Eric

Trả lời

10

Có thể do Locales. Trong Java

 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); 

sẽ cung cấp cho bạn

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

ohh tuyệt vời ... cảm ơn sự hỗ trợ của bạn. Tôi sẽ cho bạn biết. –

+0

Giải quyết bằng mã này nhờ ... Lịch cal = Calendar.getInstance (TimeZone.getDefault(), Locale.US); cal.setFirstDayOfWeek (Calendar.SUNDAY); –

+0

Cảm ơn Man. bạn đã cứu cuộc đời tôi... :) –

0

Kiểm tra lại năm mà cài đặt được đặt thành, nếu một được đặt thành năm 2012 và năm 2013 khác, điều đó sẽ giải thích sự khác biệt.

Bạn có thể yêu cầu ứng dụng đăng nhập ngày được giữ trong đối tượng lịch và đăng nó ở đây cũng chỉ để đảm bảo chúng có thông tin chính xác.

Các vấn đề liên quan