错误WEEK_OF_MONTH和DAY_OF_MONTH返回
问题描述:
这里是我的代码:错误WEEK_OF_MONTH和DAY_OF_MONTH返回
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.WEEK_OF_YEAR, selectedWeek);
c.set(Calendar.YEAR, selectedYear);
Log.v(FILE_NAME,"C content: " + c.toString());
int firstDayOfWeek = c.getFirstDayOfWeek();
String[] days = new String[firstDayOfWeek + 7];
for (int i = firstDayOfWeek; i < firstDayOfWeek + 7; i++) {
c.set(Calendar.DAY_OF_WEEK, i);
days[i] = new SimpleDateFormat("d MMM").format(c.getTime());
}
Log.v(FILE_NAME, "Start " + days[firstDayOfWeek] + " to " + days[firstDayOfWeek + 6]);
我设置selectedWeek 51,selectedYear至2016年。所以,我的期望是,因为我已经给了周和年份,在我的最后Log.v,我应该得到给定的一周(51),即12月19日至12月25日的日期列表。相反,我会一直获得本周的日期(例如,目前我总是会得到12月12日至12月18日)
显示C的内容给我
java.util.GregorianCalendar[time=?,areFieldsSet=false,lenient=true,zone=Asia/Kuala_Lumpur,firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2016,MONTH=11,WEEK_OF_YEAR=52,WEEK_OF_MONTH=3,DAY_OF_MONTH=18,DAY_OF_YEAR=353,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=24,SECOND=46,MILLISECOND=30,ZONE_OFFSET=28800000,DST_OFFSET=0]
看来WEEK_OF_MONTH返回CURRENT WEEK_OF_MONTH,而不是给定的selectedWeek和selectedYear。 DAY_OF_MONTH也一样。我的假设是DAY_OF_MONTH至少应该返回给定selectedWeek的开始日期?
我理解错了吗?如果我这样做了,我应该怎么做才能让[dayDayOfWeek]返回给定的一周和一年中的第一天?
答
我想我找出了问题所在。问题是当您设置Calendar.DAY_OF_WEEK
时,日历会自行重置,并将星期几更改为您正在设置的日期。 因此,为了使您的代码正常工作,您必须在for循环中设置Calendar.WEEK_OF_YEAR
。
for (int i = firstDayOfWeek; i < firstDayOfWeek + 7; i++) {
c.set(Calendar.DAY_OF_WEEK, i);
c.set(Calendar.WEEK_OF_YEAR, selectedWeek);
days[i] = new SimpleDateFormat("d MMM").format(c.getTime());
}
+0
我决定使用JodaTime库,而不是这个默认库来获得我所需要的。尽管如此,我试过你的解决方案,它的作品。谢谢 – imin
尝试初始化压延当前日期,然后修改它,U可能无法提供所有的值,使像时间等 '日历C = Calendar.getInstance()日程表;' –
@AbrahamGharyali我不”吨得到你的意思我可能不会提供所有的价值,使日历像时间。我已经提供了一周和一年,这是我拥有的唯一价值。顺便说一句我没有'日历c = Calendar.getInstance();'但它不会改变任何东西。 – imin
试着'c.setMinimalDaysInFirstWeek(4);'实现ISO-8601的星期日期配置。仅定义第一个星期几是不够的。并且由于Android-API级别24,还有一个方法[setWeekDate](https://developer.android.com/reference/java/util/GregorianCalendar.html#setWeekDate)应该是首选的(在范围内表示这不是很漂亮的API--有更好的时间库)。 –