我想获得当月的周数。包括上个月的上个月的天数和下个月的第一周的天数。
像这样的东西:
我想在Android上的某个gridview适配器中使用它,并试图操纵此代码块:
//FIRST_DAY_OF_WEEK =0;
int lastDay = month.getActualMaximum(Calendar.DAY_OF_MONTH);
int firstDay = (int) month.get(Calendar.DAY_OF_WEEK);
int firstDayNextMonth = nextMonth.get(Calendar.DAY_OF_WEEK);
int lastDayNextMonth=nextMonth.getActualMaximum(Calendar.DAY_OF_MONTH);
int nextMonthdays=nextMonth.getMinimalDaysInFirstWeek();
// figure size of the array
if (firstDay == 1) {
days = new String[lastDay + (FIRST_DAY_OF_WEEK * 6)];
}
else {
days = new String[lastDay + firstDay - (FIRST_DAY_OF_WEEK + 1)];
}
最佳答案
Calendar类的WEEK_OF_YEAR属性可能对您有用。引用:Calendar class
创建一个新的日期,它将是一个月中的第一天。得到这一天的一年中的某周,比方说您已经获得了开始的值(value)。
创建一个新的日期,它将是给定月份的最后一天。获取这一天的一年中的星期,因此现在您获得了最终值(value)。
现在结束-开始+ 1应该是您想要的。
当一周与另一年或类似年份重叠时,您可能不得不处理一些特殊情况。但是我认为,一旦您正确地做到这一点,就可以用简单的逻辑做到这一点。
这是简单的示例代码。我认为您可以使其发挥作用并传递您想要的任何东西。
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 1);
int start = cal.get(Calendar.WEEK_OF_YEAR);
Log.d("BLA BLA", "Value is " + start);
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 28);
int end = cal.get(Calendar.WEEK_OF_YEAR);
//Above line will not work for December Month, use following line for this
int end = isDecember?53:cal.get(Calendar.WEEK_OF_YEAR);
Log.d("BLA BLA", "Value is " + end);
Log.d("BLA BLA", "Num weeks:: " + (end - start +1 ));
对于角落案例:
极端情况仅在Januaray月份发生(例如,2010年1月,2000年1月),在大多数情况下,这些日子是上一年最后一周的一部分,因此起始值为52,结束值为5。发生这种情况,请检查是否
if(start > end) {
numweeks = end + 1;
}
附言:将其放入您得到的不同测试输入中。如果您发现任何错误,请告诉我是否可以改善。
甚至更简单的解决方案:
Calendar cal = Calendar.getInstance();
for(int i = 0 ; i < 11;i++){
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, i);
int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);
Log.d("LOG","max week number" + maxWeeknumber);
}
01-22 01:49:03.591: D/LOG(573): max week number5
01-22 01:49:03.602: D/LOG(573): max week number5
01-22 01:49:03.602: D/LOG(573): max week number6
01-22 01:49:03.671: D/LOG(573): max week number5
01-22 01:49:03.671: D/LOG(573): max week number5
01-22 01:49:03.671: D/LOG(573): max week number6
01-22 01:49:03.681: D/LOG(573): max week number5
01-22 01:49:03.691: D/LOG(573): max week number5
01-22 01:49:03.691: D/LOG(573): max week number5
01-22 01:49:03.711: D/LOG(573): max week number5
01-22 01:49:03.711: D/LOG(573): max week number5
简单解决方案适用于极端情况:
Calendar cal = Calendar.getInstance();
for(int i = 0 ; i < 11;i++){
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, i);
int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);
// Month value starts from 0 to 11 for Jan to Dec
Log.d("LOG","For Month :: "+ i + " Num Week :: " + maxWeeknumber);
}
日志:
01-22 01:59:35.841: D/LOG(629): For Month :: 0 Num Week :: 6
01-22 01:59:35.841: D/LOG(629): For Month :: 1 Num Week :: 5
01-22 01:59:35.841: D/LOG(629): For Month :: 2 Num Week :: 5
01-22 01:59:35.841: D/LOG(629): For Month :: 3 Num Week :: 5
01-22 01:59:35.841: D/LOG(629): For Month :: 4 Num Week :: 6
01-22 01:59:35.852: D/LOG(629): For Month :: 5 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 6 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 7 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 8 Num Week :: 5
01-22 01:59:35.871: D/LOG(629): For Month :: 9 Num Week :: 6
01-22 01:59:35.871: D/LOG(629): For Month :: 10 Num Week :: 5
关于java - 我想获取特定月份的周数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14454736/