问题描述
例如,9月从01/09 / 2020-> 30/09/2020开始30天,但UI日历显示从29/08 / 2020-> 02/10/2020
这是我的代码。谁可以帮助我?
val calendar: Calendar = Calendar.getInstance()
calendar.firstDayOfWeek = Calendar.MONDAY
calendar.add(Calendar.MONTH,position)
// Set day of month as 1
calendar.set(Calendar.DAY_OF_MONTH,1)
// Get a number of the first day of the week
val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
// Count when month is beginning
val firstDayOfWeek = calendar.firstDayOfWeek
val monthBeginningCell = (if (dayOfWeek < firstDayOfWeek) 7 else 0) + dayOfWeek - firstDayOfWeek
// Subtract a number of beginning days,it will let to load a part of a prevIoUs month
calendar.add(Calendar.DAY_OF_MONTH,-monthBeginningCell)
/* Get all days of one page (35 is a number of all possible cells in one page
(a part of prevIoUs month,current month and a part of next month))
*/
while (days.size < 35) {
days.add(calendar.time)
calendar.add(Calendar.DAY_OF_MONTH,1)
}
解决方法
您到底需要什么?如果您需要一个月的全部日历,则可以使用以下代码作为示例:
class Scratch {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// The month you want to set
int month = Calendar.SEPTEMBER;
calendar.set(Calendar.MONTH,month);
int firstDayOfMonth = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
int lastDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(getTimeOfWeek(lastDayOfMonth,false,month));
System.out.println(getTimeOfWeek(firstDayOfMonth,true,month));
}
private static Instant getTimeOfWeek(int day,boolean isFirst,int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH,month);
calendar.set(Calendar.DAY_OF_MONTH,day);
int dayInWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (isFirst) {
calendar.set(Calendar.DAY_OF_MONTH,day - dayInWeek + 1);
} else {
calendar.set(Calendar.DAY_OF_MONTH,day + 7 - dayInWeek);
}
return calendar.toInstant();
}
}
如果您只想要该月的范围,只需将日历设置为该月的第一天和最后一天。 希望它能起作用!