如何在Android中获得一个月的日子

问题描述

我有客户UI日历,但有一个问题:

例如,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();
    }
}

如果您只想要该月的范围,只需将日历设置为该月的第一天和最后一天。 希望它能起作用!