日历.WEEK_OF_MONTH在两个不同的设备上给出了不同的结果。

9

我有两个设备,一个是安卓2.3.5的HTC,另一个是安卓2.3.6的三星手机。现在我遇到的问题是需要获取一个日期在这个月中的第几周。

所以我写了这段代码,并在两台设备上安装,然后设置系统日期为

2013年1月27日

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

现在在HTC上的输出为

 weekOfMonth = 5

在三星设备上运行相同的代码会产生以下结果:
 weekOfMonth = 4

这真的让我的逻辑和计算混乱了。我做错了什么吗?

你在哪里设置系统日期的代码?那是这里最重要的代码。更重要的是,你是否运行完全相同的代码,还是存在差异的空间? - HXCaine
我认为日历是与所在地域和时区相关的。你的两个设备是否注册了不同的时区或地域设置?如果时间以毫秒为单位设置,则可能会因时区不同而导致日期不同。如果有疑问,请使用JodaTime,网址为http://joda-time.sourceforge.net/。 - BoredAndroidDeveloper
一个设备也可以将周一作为一周的开始,因为27日是星期天。 - Cat
2个回答

13

可能是由于Locale(区域设置)问题导致的。在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);

会给你

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

1
用以下代码解决了问题,谢谢...Calendar cal = Calendar.getInstance(TimeZone.getDefault(),Locale.US); cal.setFirstDayOfWeek(Calendar.SUNDAY); - Shashank Degloorkar
1
谢谢你,伙计。你救了我的命... :) - Mukesh Garg

-1

请仔细检查设置的年份,如果一个设置为2012年,另一个设置为2013年,这可能会解释差异。

您能否让应用程序记录日历对象中保存的日期并将其发布在此处,以确保它们有正确的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接