如何显示在日历previousmonth日期日历、日期、previousmonth

2023-09-06 00:07:37 作者:心恋夜未央

这是我的cCalender code以下的工作很好,但唯一的问题是每个月的1日之前没有显示日期见本的 http://imgur.com/inl1GzE 和每月完整的源$ C ​​$ C LASTDAY后,这里的 https://www.zeta-uploader.com/1699876023

 我想要做这样的事情

           周日周一周二周三周四周五周六
            29 30 31 1 2 3 4


        公共类HoyahCalendar延伸活动{
公共静态INT mYear;
公共静态INT CURRENTINDEX = -1;
公共静态INT mMonth;
公共静态INT MDAY;
公共静态的String [] [] A =新的String [6] [7];


        日历mCalendar = Calendar.getInstance();
    mYear = mCalendar.get(Calendar.YEAR);
    mMonth = mCalendar.get(Calendar.MONTH)+ 1;
    MDAY = mCalendar.get(Calendar.DAY_OF_MONTH);




                  last_week.setOnClickListener(新View.OnClickListener(){
        公共无效的onClick(视图v){
            如果(mMonth == 1){
                mYear  -  = 1;
                mMonth = 12;
                新ShowCalendar(mYear,mMonth,MDAY,最后);
                showOnScreen();
            } 其他 {
                // mMonth  -  = 1;
                新ShowCalendar(mYear,mMonth,MDAY,最后);
                showOnScreen();
            }
        }
    });

    next_week.setOnClickListener(新View.OnClickListener(){
        公共无效的onClick(视图v){

            如果(mMonth == 12){
                mYear + = 1;
                mMonth = 1;
                新ShowCalendar(mYear,mMonth,MDAY,下一步);
                showOnScreen();
            } 其他 {
                如果(HoyahCalendar.currentIndex == 4){
                    HoyahCalendar.currentIndex = 4;
                    // mMonth + = 1;
                }

                新ShowCalendar(mYear,mMonth,MDAY,下一步);
                showOnScreen();
            }

        }
    });

    新ShowCalendar(mYear,mMonth);
    showOnScreen();





                  公共类ShowCalendar {
INT mYear;
INT mMonth;
INT MDAY;
公共ShowCalendar(INT mYear,诠释mMonth){
    this.mYear = mYear;
    this.mMonth = mMonth;
    calculateMonthFirstday();
}
公共ShowCalendar(INT mYear,诠释mMonth,诠释MDAY){
    this.mYear = mYear;
    this.mMonth = mMonth;
    HoyahCalendar.currentIndex = 0;

    this.mDay = MDAY;
    calculateMonthFirstday();
}


公众诠释getmDay(){
    返回MDAY;
}





公共无效setmDay(INT MDAY){
    this.mDay = MDAY;
}





公共ShowCalendar(INT mYear,诠释mMonth,INT MDAY,串时间){
    this.mYear = mYear;
    this.mMonth = mMonth;
    如果(时间==下一步){
        HoyahCalendar.currentIndex ++;
        如果(HoyahCalendar.currentIndex == 5){
            HoyahCalendar.currentIndex--;
        }
        this.mDay = MDAY + 7;
    }否则,如果(时间==最后){
        HoyahCalendar.currentIndex--;
        如果(HoyahCalendar.currentIndex == -1){
            HoyahCalendar.currentIndex ++;
        }
        this.mDay = MDAY  -  7;
    }
    calculateMonthFirstday();
}

公共无效calculateMonthFirstday(){
    INT月,first_day = 0;
    如果((mYear%4 == 0安培;&安培;!mYear%100 = 0)||(mYear%400 == 0))
        一个月= 1;
    其他
        一个月= 0;

    INT Y,Y12,C,C12,M,D;
    Y = mYear%100;
    Y12 =(mYear-1)%100; //只为一月和二月
    C = mYear / 100;
    C12 =(mYear-1)/ 100;
    M = mMonth;
    D = 1;

    开关(mMonth){
    情况1:{first_day = Y12 + Y12 / 4 + C12 / 4  -  2 * C12 + 26 *(13 + 1)/ 10 + D  -  1;破;}
    情况2:{first_day = Y12 + Y12 / 4 + C12 / 4  -  2 * C12 + 26 *(14 + 1)/ 10 + D  -  1;破;}
    情形3:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    壳4:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    壳体5:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    情况6:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    壳体7:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    壳体8:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    外壳9:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    壳体10:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    情况11:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    壳体12:{first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;破;}
    }
    如果(first_day℃,)
        first_day = 7  - (Math.abs(first_day))%7; // first_day每月第一​​天星期几
    其他
        first_day = first_day%7;

    开关(mMonth){
        案例1:{CalculateCalendar(1,first_day,31);打破;}
        案例2:{CalculateCalendar(2 first_day,28 +个月);打破;}
        案例3:{CalculateCalendar(3,first_day,31);打破;}
        壳4:{CalculateCalendar(4,first_day,30);打破;}
        案例5:{CalculateCalendar(5,first_day,31);打破;}
        情况6:{CalculateCalendar(6,first_day,30);打破;}
        案例7:{CalculateCalendar(7,first_day,31);打破;}
        案例8:{CalculateCalendar(8 first_day,31);打破;}
        外壳9:{CalculateCalendar(9,first_day,30);打破;}
        案例10:{CalculateCalendar(10,first_day,31);打破;}
        情况11:{CalculateCalendar(11,first_day,30);打破;}
        案例12:{CalculateCalendar(12,first_day,31);打破;}
    }
}

公共无效CalculateCalendar(INT month_no,诠释week_no,INT数组month_days){

    INT I,S = 0;
    INT CURRENTDAY;
    如果(this.mDay == 0){
        MDAY = 1;
        CURRENTDAY = HoyahCalendar.mDay;
    }其他 {
        CURRENTDAY = this.mDay;
    }
    //串[] [] =一个新的String [6] [7];
    对于(i = 0; I< week_no;我++)

        HoyahCalendar.a [I / 7] [我%7] =;

    对于(i = week_no; I< week_no +数组month_days;我++){
        S = I  -  week_no + 1;
        HoyahCalendar.a [I / 7] [则i%7] =将String.valueOf(多个);
        如果(S == CURRENTDAY和放大器;&安培; HoyahCalendar.currentIndex == -1){
            HoyahCalendar.currentIndex = I / 7;
        }
    }
    对于(I = 0; I&小于7;我++){
        如果(HoyahCalendar.a [HoyahCalendar.currentIndex] [我] == NULL){
            HoyahCalendar.a [0] [I] =;
        }其他{
            HoyahCalendar.a [0] [I] =
     HoyahCalendar.a [HoyahCalendar.currentIndex] [I];
        }

    }
    对于(I = week_no +数组month_days; I< 42;我++)


        HoyahCalendar.a [I / 7] [我%7] =;
}
   }
 

解决方案

这里是你的问题的解决方案。 首先你需要一个不同的设计,计算月历为6X7阵列的功能 所以使用这个函数,它年份和月份作为参数,那么就会产生月历的准确阵列。

  / **
 *
 *今年@param年
 *参数一月= 0,二月= 1,...,月= 10,十二月= 11,你知道我的意思
 * @返回
 * /
私有静态诠释[] [] getArrayCalendar(INT年,月整型)
{
    //很重要
    //孙= 1,MON = 2,TU = 3,...,星期五= 6,周六= 7,根据美国
    INT [] [] =一个新INT [6] [7];
    INT天= 1; //一天必须始终是一
    日历CAL = Calendar.getInstance();
    cal.set(Calendar.YEAR,一年);
    cal.set(Calendar.MONTH,月);
    cal.set(Calendar.DAY_OF_MONTH,日);

    INT DAYOFWEEK = cal.get(Calendar.DAY_OF_WEEK);
    INT GoBack的= 1  - 一周中的某天;
    cal.add(Calendar.DAY_OF_MONTH,GoBack的);


    的System.out.println(苏\ TMO \ TTU \ TWE \ tTH的\ TFR \ tSA时);

    的for(int i = 0; I<则为a.length;我++)
    {
        为(诠释J = 0; J&其中;一个[0] .length; J ++)
        {
            A [1] [J] = cal.get(Calendar.DAY_OF_MONTH);
            System.out.print(cal.get(Calendar.DAY_OF_MONTH));
            System.out.print(\ t的);
            cal.add(Calendar.DAY_OF_MONTH,1);
        }
        的System.out.println();
    }

    返回;
}
 
八月征期来啦 征期日历您记好

例: getArrayCalendar(2013,4)// 五月= 4 ,年= 2013 结果印:

  SU周一周二周三周四周五周六
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
 

- 现在的问题的快速修复: 修改您的ShowCalendar类如下:

 包com.example.calender5example;

    进口的java.util.Calendar;

    公共类ShowCalendar
    {

          INT mYear;
        INT mMonth;
        INT MDAY;

    公共ShowCalendar(INT mYear,INT mMonth)
    {
        this.mYear = mYear;
        this.mMonth = mMonth;
        calculateMonthFirstday();
    }

    公共ShowCalendar(INT mYear,诠释mMonth,INT MDAY)
    {
        this.mYear = mYear;
        this.mMonth = mMonth;
        HoyahCalendar.currentIndex = 0;

        this.mDay = MDAY;
        calculateMonthFirstday();
    }

    公众诠释getmDay()
    {
        返回MDAY;
    }

    公共无效setmDay(INT MDAY)
    {
        this.mDay = MDAY;
    }

    公共ShowCalendar(INT mYear,诠释mMonth,INT MDAY,字符串时间)
    {
        this.mYear = mYear;
        this.mMonth = mMonth;
        如果(时间==下一步)
        {
            HoyahCalendar.currentIndex ++;
            如果(HoyahCalendar.currentIndex == 5)
            {
                HoyahCalendar.currentIndex--;
            }
            this.mDay = MDAY + 7;
        }
        否则,如果(时间==最后)
        {
            HoyahCalendar.currentIndex--;
            如果(HoyahCalendar.currentIndex == -1)
            {
                HoyahCalendar.currentIndex ++;
            }
            this.mDay = MDAY  -  7;
        }
        calculateMonthFirstday();
    }

    公共无效calculateMonthFirstday()
    {
        INT月,first_day = 0;
        如果((mYear%4 == 0安培;&安培;!mYear%100 = 0)||(mYear%400 == 0))
            一个月= 1;
        其他
            一个月= 0;

        INT Y,Y12,C,C12,M,D;
        Y = mYear%100;
        Y12 =(mYear  -  1)%100; //只为一月和二月
        C = mYear / 100;
        C12 =(mYear  -  1)/ 100;
        M = mMonth;
        D = 1;

        开关(mMonth)
        {
        情况1:
        {
            first_day = Y12 + Y12 / 4 + C12 / 4  -  2 * C12 + 26 *(13 + 1)/ 10 + D  -  1;
            打破;
        }
        案例2:
        {
            first_day = Y12 + Y12 / 4 + C12 / 4  -  2 * C12 + 26 *(14 + 1)/ 10 + D  -  1;
            打破;
        }
        案例3:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        壳体4:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        壳体5:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        情况6:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        案例7:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        案例8:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        案例9:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        案例10:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        案例11:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        案例12:
        {
            first_day = Y + Y / 4 + C / 4  -  2 * C + 26 *第(m + 1)/ 10 + D  -  1;
            打破;
        }
        }
        如果(first_day℃,)
            first_day = 7  - (Math.abs(first_day))%7; // first_day每月第一​​天星期几
        其他
            first_day = first_day%7;

        开关(mMonth)
        {
        情况1:
        {
            CalculateCalendar(1,first_day,31);
            打破;
        }
        案例2:
        {
            CalculateCalendar(2,first_day,28 +个月);
            打破;
        }
        案例3:
        {
            CalculateCalendar(3,first_day,31);
            打破;
        }
        壳体4:
        {
            CalculateCalendar(4,first_day,30);
            打破;
        }
        壳体5:
        {
            CalculateCalendar(5,first_day,31);
            打破;
        }
        情况6:
        {
            CalculateCalendar(6,first_day,30);
            打破;
        }
        案例7:
        {
            CalculateCalendar(7,first_day,31);
            打破;
        }
        案例8:
        {
            CalculateCalendar(8,first_day,31);
            打破;
        }
        案例9:
        {
            CalculateCalendar(9,first_day,30);
            打破;
        }
        案例10:
        {
            CalculateCalendar(10,first_day,31);
            打破;
        }
        案例11:
        {
            CalculateCalendar(11,first_day,30);
            打破;
        }
        案例12:
        {
            CalculateCalendar(12,first_day,31);
            打破;
        }
        }
    }

    公共无效CalculateCalendar(INT month_no,诠释week_no,INT数组month_days)
    {

        INT I,S = 0;
        INT CURRENTDAY;
        如果(this.mDay == 0)
        {
            MDAY = 1;
            CURRENTDAY = HoyahCalendar.mDay;
        }
        其他
        {
            CURRENTDAY = this.mDay;
        }
        //串[] [] =一个新的String [6] [7];
        对于(i = 0; I< week_no;我++)

            HoyahCalendar.a [I / 7] [我%7] =;

        对于(i = week_no; I< week_no +数组month_days;我++)
        {
            S = I  -  week_no + 1;
            HoyahCalendar.a [I / 7] [则i%7] =将String.valueOf(多个);
            如果(S == CURRENTDAY和放大器;&安培; HoyahCalendar.currentIndex == -1)
            {
                HoyahCalendar.currentIndex = I / 7;
            }
        }
        对于(I = 0; I&小于7;我+ +)
        {
            如果(HoyahCalendar.a [HoyahCalendar.currentIndex] [我] == NULL)
            {
                HoyahCalendar.a [0] [I] =;
            }
            其他
            {
                HoyahCalendar.a [0] [I] = HoyahCalendar.a [HoyahCalendar.currentIndex] [I];
            }

        }
        对于(I = week_no +数组month_days; I< 42;我++)

            HoyahCalendar.a [I / 7] [我%7] =;
//我修复从这里开始,我不想错过你的code

        诠释一个[] [] = getArrayCalendar(mYear,mMonth);
        HoyahCalendar.a = toStringArray(一); //这里我换成你的数组
    }

    私有String [] [] toStringArray(INT [] []一)
    {
        的String [] []数组=新的String [6] [7];
        的for(int i = 0; I<则为a.length;我++)
        {
            为(诠释J = 0; J&其中;一个[0] .length; J ++)
            {
                数组[I] [J] = Integer.toString(A [1] [J]);
            }
            的System.out.println();
        }
        返回数组;
    }

    / **
     *
     * @参数年
     *            那年
     * @参数一个月
     *一月= 0,月= 1,....,月= 10,和DEC = 11,要知道
     *            我的意思
     * @返回
     * /
    私有静态诠释[] [] getArrayCalendar(INT年,月整型)
    {
        // 很重要
        //孙= 1,MON = 2,TU = 3,...,星期五= 6,周六= 7,根据美国
        INT [] [] =一个新INT [6] [7];
        INT天= 1; //一天必须始终是一
        日历CAL = Calendar.getInstance();
        cal.set(Calendar.YEAR,一年);
        cal.set(Calendar.MONTH,月);
        cal.set(Calendar.DAY_OF_MONTH,日);

        INT DAYOFWEEK = cal.get(Calendar.DAY_OF_WEEK);
        INT GoBack的= 1  - 一周中的某天;
        cal.add(Calendar.DAY_OF_MONTH,GoBack的);

        的System.out.println(苏\ TMO \ TTU \ TWE \ tTH的\ TFR \ tSA时);

        的for(int i = 0; I<则为a.length;我++)
        {
            为(诠释J = 0; J&其中;一个[0] .length; J ++)
            {
                A [1] [J] = cal.get(Calendar.DAY_OF_MONTH);
                System.out.print(cal.get(Calendar.DAY_OF_MONTH));
                System.out.print(\ t的);
                cal.add(Calendar.DAY_OF_MONTH,1);
            }
            的System.out.println();
        }

        返回;
    }
}
 

现在您可以使用该功能来生成完整的monthely农历和(年,月),并用它来浏览你的用户界面。

this is my cCalender code below is work fine but only problem is is not display date before first day of month see this http://imgur.com/inl1GzE and after lastday of month full source code is here https://www.zeta-uploader.com/1699876023

              i want to do something like this

           Sun Mon Tues  Wed  Thur Fri  Sat 
            29  30  31   1      2   3    4


        public class HoyahCalendar extends Activity {
public static int mYear;
public static int currentIndex = -1;
public static int mMonth;
public static int mDay;
public static String[][] a = new String[6][7];


        Calendar mCalendar = Calendar.getInstance();
    mYear = mCalendar.get(Calendar.YEAR);
    mMonth = mCalendar.get(Calendar.MONTH) + 1;
    mDay = mCalendar.get(Calendar.DAY_OF_MONTH);




                  last_week.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (mMonth == 1) {
                mYear -= 1;
                mMonth = 12;
                new ShowCalendar(mYear, mMonth, mDay, "last");
                showOnScreen();
            } else {
                // mMonth -= 1;
                new ShowCalendar(mYear, mMonth, mDay, "last");
                showOnScreen();
            }
        }
    });

    next_week.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            if (mMonth == 12) {
                mYear += 1;
                mMonth = 1;
                new ShowCalendar(mYear, mMonth, mDay, "next");
                showOnScreen();
            } else {
                if (HoyahCalendar.currentIndex == 4) {
                    HoyahCalendar.currentIndex = 4;
                    // mMonth += 1;
                }

                new ShowCalendar(mYear, mMonth, mDay, "next");
                showOnScreen();
            }

        }
    });

    new ShowCalendar(mYear, mMonth);
    showOnScreen();





                  public class ShowCalendar {
int mYear;
int mMonth;
int mDay;
public ShowCalendar(int mYear, int mMonth){
    this.mYear = mYear;
    this.mMonth = mMonth;
    calculateMonthFirstday();
}
public ShowCalendar(int mYear, int mMonth, int mDay){
    this.mYear = mYear;
    this.mMonth = mMonth;
    HoyahCalendar.currentIndex = 0;

    this.mDay = mDay;
    calculateMonthFirstday();
}


public int getmDay() {
    return mDay;
}





public void setmDay(int mDay) {
    this.mDay = mDay;
}





public ShowCalendar(int mYear, int mMonth, int mDay, String time){
    this.mYear = mYear;
    this.mMonth = mMonth;
    if (time == "next"){
        HoyahCalendar.currentIndex++;
        if (HoyahCalendar.currentIndex == 5){
            HoyahCalendar.currentIndex--;
        }
        this.mDay = mDay + 7;
    } else if (time == "last"){
        HoyahCalendar.currentIndex--;
        if (HoyahCalendar.currentIndex == -1){
            HoyahCalendar.currentIndex++;
        }
        this.mDay = mDay - 7;
    }
    calculateMonthFirstday();
}

public void calculateMonthFirstday(){
    int month, first_day=0;
    if((mYear%4==0 && mYear%100!=0)||(mYear%400==0))
        month=1;
    else
        month=0;

    int y, y12, c, c12, m, d;
    y = mYear%100;
    y12 = (mYear-1)%100; //only for January and February
    c = mYear/100;
    c12 = (mYear-1)/100;
    m = mMonth;
    d = 1;

    switch(mMonth){
    case 1: {first_day = y12 + y12/4 +c12/4 - 2*c12 + 26*(13 + 1)/10 + d - 1;break;}
    case 2: {first_day = y12 + y12/4 +c12/4 - 2*c12 + 26*(14 + 1)/10 + d - 1;break;}
    case 3: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 4: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 5: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 6: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 7: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 8: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 9: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 10: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 11: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    case 12: {first_day = y + y/4 +c/4 - 2*c + 26*(m + 1)/10 + d - 1;break;}
    }
    if(first_day<0)
        first_day = 7 - (Math.abs(first_day))%7;//first_day每月第一天星期几
    else
        first_day = first_day%7;

    switch(mMonth){
        case 1: {CalculateCalendar(1,first_day,31);break;}
        case 2: {CalculateCalendar(2,first_day,28+month);break;}
        case 3: {CalculateCalendar(3,first_day,31);break;}
        case 4: {CalculateCalendar(4,first_day,30);break;}
        case 5: {CalculateCalendar(5,first_day,31);break;}
        case 6: {CalculateCalendar(6,first_day,30);break;}
        case 7: {CalculateCalendar(7,first_day,31);break;}
        case 8: {CalculateCalendar(8,first_day,31);break;}
        case 9: {CalculateCalendar(9,first_day,30);break;}
        case 10:{CalculateCalendar(10,first_day,31);break;}
        case 11:{CalculateCalendar(11,first_day,30);break;}
        case 12:{CalculateCalendar(12,first_day,31);break;}
    }
}

public void CalculateCalendar(int month_no, int week_no, int month_days){

    int i, s = 0;
    int currentDay;
    if (this.mDay == 0){
        mDay = 1;
        currentDay= HoyahCalendar.mDay;     
    }else {
        currentDay = this.mDay;
    }
    //String[][] a = new String[6][7];
    for (i=0;i<week_no;i++)

        HoyahCalendar.a[i/7][i%7] = "";

    for(i=week_no; i<week_no + month_days; i++){
        s = i - week_no + 1;
        HoyahCalendar.a[i/7][i%7] = String.valueOf(s);
        if (s == currentDay && HoyahCalendar.currentIndex == -1){
            HoyahCalendar.currentIndex = i/7;
        }
    } 
    for (i=0; i<7;i++){
        if (HoyahCalendar.a[HoyahCalendar.currentIndex][i] == null){
            HoyahCalendar.a[0][i] = "";
        }else{
            HoyahCalendar.a[0][i] = 
     HoyahCalendar.a[HoyahCalendar.currentIndex][i];
        }

    }
    for(i=week_no+month_days; i<42; i++)


        HoyahCalendar.a[i/7][i%7] = "";
}
   }

解决方案

here is the solution for your problem. First you need a different design of the function that calculate the month calendar as array of 6x7 so use this function that takes year and month as parameters, then it will generate an accurate array of month calendar.

/**
 * 
 * @param year the year
 * @param month January=0, Feb = 1, ...., Nov = 10, and Dec = 11, you know what I mean
 * @return
 */
private static int[][] getArrayCalendar(int year,int month)
{
    //VERY IMPORTANT
    //SUN = 1, MON = 2, TU = 3, ..., Fri = 6, Sat = 7 according to USA
    int[][] a = new int[6][7];
    int day = 1; //day must be always one
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, day);

    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    int goBack = 1 - dayOfWeek;
    cal.add(Calendar.DAY_OF_MONTH, goBack);


    System.out.println("SU\tMO\tTU\tWE\tTH\tFR\tSA");

    for(int i=0;i<a.length;i++)
    {
        for(int j=0;j<a[0].length;j++)
        {
            a[i][j] = cal.get(Calendar.DAY_OF_MONTH);
            System.out.print(cal.get(Calendar.DAY_OF_MONTH));
            System.out.print("\t");
            cal.add(Calendar.DAY_OF_MONTH, 1);
        }
        System.out.println();
    }

    return a;
}

Example: getArrayCalendar(2013,4)// May=4, year= 2013 RESULT AS PRINTED:

SU  MO  TU  WE  TH  FR  SA
28  29  30  1   2   3   4
5   6   7   8   9   10  11  
12  13  14  15  16  17  18  
19  20  21  22  23  24  25  
26  27  28  29  30  31  1   
2   3   4   5   6   7   8

- Now the quick fix for the issue: modify your ShowCalendar class as following:

    package com.example.calender5example;

    import java.util.Calendar;

    public class ShowCalendar
    {

          int mYear;
        int mMonth;
        int mDay;

    public ShowCalendar(int mYear, int mMonth)
    {
        this.mYear = mYear;
        this.mMonth = mMonth;
        calculateMonthFirstday();
    }

    public ShowCalendar(int mYear, int mMonth, int mDay)
    {
        this.mYear = mYear;
        this.mMonth = mMonth;
        HoyahCalendar.currentIndex = 0;

        this.mDay = mDay;
        calculateMonthFirstday();
    }

    public int getmDay()
    {
        return mDay;
    }

    public void setmDay(int mDay)
    {
        this.mDay = mDay;
    }

    public ShowCalendar(int mYear, int mMonth, int mDay, String time)
    {
        this.mYear = mYear;
        this.mMonth = mMonth;
        if (time == "next")
        {
            HoyahCalendar.currentIndex++;
            if (HoyahCalendar.currentIndex == 5)
            {
                HoyahCalendar.currentIndex--;
            }
            this.mDay = mDay + 7;
        }
        else if (time == "last")
        {
            HoyahCalendar.currentIndex--;
            if (HoyahCalendar.currentIndex == -1)
            {
                HoyahCalendar.currentIndex++;
            }
            this.mDay = mDay - 7;
        }
        calculateMonthFirstday();
    }

    public void calculateMonthFirstday()
    {
        int month, first_day = 0;
        if ((mYear % 4 == 0 && mYear % 100 != 0) || (mYear % 400 == 0))
            month = 1;
        else
            month = 0;

        int y, y12, c, c12, m, d;
        y = mYear % 100;
        y12 = (mYear - 1) % 100; // only for January and February
        c = mYear / 100;
        c12 = (mYear - 1) / 100;
        m = mMonth;
        d = 1;

        switch (mMonth)
        {
        case 1:
        {
            first_day = y12 + y12 / 4 + c12 / 4 - 2 * c12 + 26 * (13 + 1) / 10 + d - 1;
            break;
        }
        case 2:
        {
            first_day = y12 + y12 / 4 + c12 / 4 - 2 * c12 + 26 * (14 + 1) / 10 + d - 1;
            break;
        }
        case 3:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 4:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 5:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 6:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 7:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 8:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 9:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 10:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 11:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        case 12:
        {
            first_day = y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1;
            break;
        }
        }
        if (first_day < 0)
            first_day = 7 - (Math.abs(first_day)) % 7;// first_day每月第一天星期几
        else
            first_day = first_day % 7;

        switch (mMonth)
        {
        case 1:
        {
            CalculateCalendar(1, first_day, 31);
            break;
        }
        case 2:
        {
            CalculateCalendar(2, first_day, 28 + month);
            break;
        }
        case 3:
        {
            CalculateCalendar(3, first_day, 31);
            break;
        }
        case 4:
        {
            CalculateCalendar(4, first_day, 30);
            break;
        }
        case 5:
        {
            CalculateCalendar(5, first_day, 31);
            break;
        }
        case 6:
        {
            CalculateCalendar(6, first_day, 30);
            break;
        }
        case 7:
        {
            CalculateCalendar(7, first_day, 31);
            break;
        }
        case 8:
        {
            CalculateCalendar(8, first_day, 31);
            break;
        }
        case 9:
        {
            CalculateCalendar(9, first_day, 30);
            break;
        }
        case 10:
        {
            CalculateCalendar(10, first_day, 31);
            break;
        }
        case 11:
        {
            CalculateCalendar(11, first_day, 30);
            break;
        }
        case 12:
        {
            CalculateCalendar(12, first_day, 31);
            break;
        }
        }
    }

    public void CalculateCalendar(int month_no, int week_no, int month_days)
    {

        int i, s = 0;
        int currentDay;
        if (this.mDay == 0)
        {
            mDay = 1;
            currentDay = HoyahCalendar.mDay;
        }
        else
        {
            currentDay = this.mDay;
        }
        // String[][] a = new String[6][7];
        for (i = 0; i < week_no; i++)

            HoyahCalendar.a[i / 7][i % 7] = "";

        for (i = week_no; i < week_no + month_days; i++)
        {
            s = i - week_no + 1;
            HoyahCalendar.a[i / 7][i % 7] = String.valueOf(s);
            if (s == currentDay && HoyahCalendar.currentIndex == -1)
            {
                HoyahCalendar.currentIndex = i / 7;
            }
        }
        for (i = 0; i < 7; i++)
        {
            if (HoyahCalendar.a[HoyahCalendar.currentIndex][i] == null)
            {
                HoyahCalendar.a[0][i] = "";
            }
            else
            {
                HoyahCalendar.a[0][i] = HoyahCalendar.a[HoyahCalendar.currentIndex][i];
            }

        }
        for (i = week_no + month_days; i < 42; i++)

            HoyahCalendar.a[i / 7][i % 7] = "";
//my fix starts here, I don't want to miss with your code

        int a[][] = getArrayCalendar(mYear, mMonth);
        HoyahCalendar.a = toStringArray(a);// Here I replaced your array
    }

    private String[][] toStringArray(int[][] a)
    {
        String[][] array = new String[6][7];
        for (int i = 0; i < a.length; i++)
        {
            for (int j = 0; j < a[0].length; j++)
            {
                array[i][j] = Integer.toString(a[i][j]);
            }
            System.out.println();
        }
        return array;
    }

    /**
     * 
     * @param year
     *            the year
     * @param month
     *            January=0, Feb = 1, ...., Nov = 10, and Dec = 11, you know
     *            what I mean
     * @return
     */
    private static int[][] getArrayCalendar(int year, int month)
    {
        // VERY IMPORTANT
        // SUN = 1, MON = 2, TU = 3, ..., Fri = 6, Sat = 7 according to USA
        int[][] a = new int[6][7];
        int day = 1; // day must be always one
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month);
        cal.set(Calendar.DAY_OF_MONTH, day);

        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        int goBack = 1 - dayOfWeek;
        cal.add(Calendar.DAY_OF_MONTH, goBack);

        System.out.println("SU\tMO\tTU\tWE\tTH\tFR\tSA");

        for (int i = 0; i < a.length; i++)
        {
            for (int j = 0; j < a[0].length; j++)
            {
                a[i][j] = cal.get(Calendar.DAY_OF_MONTH);
                System.out.print(cal.get(Calendar.DAY_OF_MONTH));
                System.out.print("\t");
                cal.add(Calendar.DAY_OF_MONTH, 1);
            }
            System.out.println();
        }

        return a;
    }
}

now you can use the function to generate full monthely calendar for any (year,month) and using that to navigate through you UI.