java类生成日历自己写的,可以输出到html页面

所有的类和方法都在这里面了,大家可以参考一下,自我感觉写的不是很好,但是效果实现了!

import java.util.Calendar;
import java.util.Date;

import com.hzpm.util.DateUtil;

public class StartEnd {

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {

        int currentMonthNum = getCurrentMonthLastDay();// 获取指定的年份月份共有多少天
        int rows = getRows(2014, 3);// 返回指定的月份共计有多少行
        int indexNum = getStartNum(2014, 3);
        int startNum = 1;
        String tableStr = "<table>\n<tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>";
    

        for (int i = 1; i <= rows; i++) {
            tableStr+="<tr>";
            if (i == 1) {

                if (indexNum == 1) {
                    for (int j = 1; j <= 7; j++) {
                        tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                        startNum++;
                    }

                }
                if (indexNum == 2) {
                    for (int k = 1; k <= 1; k++) {
                        tableStr+="<td>--</td>";
                        
                    }
                    for (int j = 1; j <= 6; j++) {
                        tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                        startNum++;
                    }

                }
                if (indexNum == 3) {
                    for (int k = 1; k <= 2; k++) {
                        tableStr+="<td>--</td>";
                        
                    }
                    for (int j = 1; j <= 5; j++) {
                        tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                        
                        startNum++;
                    }

                }
                if (indexNum == 4) {
                    for (int k = 1; k <= 3; k++) {
                        tableStr+="<td>--</td>";
                    
                    }
                    for (int j = 1; j <= 4; j++) {
                        tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                    
                        startNum++;
                    }

                }
                if (indexNum == 5) {
                    for (int k = 1; k <= 4; k++) {
                        tableStr+="<td>--</td>";
                        
                    }
                    for (int j = 1; j <= 3; j++) {
                        tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                    
                        startNum++;
                    }

                }
                if (indexNum == 6) {
                    for (int k = 1; k <= 5; k++) {
                        tableStr+="<td>--</td>";
                    }
                    for (int j = 1; j <= 2; j++) {
                        tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                        
                        startNum++;
                    }

                }
                if (indexNum == 7) {
                    for (int k = 1; k <= 6; k++) {
                        tableStr+="<td>--</td>";
                    }
                    for (int j = 1; j <= 1; j++) {
                        tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                    
                        startNum++;
                    }

                }

            }
            if (i > 1 & i < rows) {
                for (int j = 1; j <= 7; j++) {
                    tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                    
                    startNum++;
                }

            }
            if (i == rows) {
                int temp = currentMonthNum - startNum;
                for (int j = 0; j <= temp; j++) {
                    tableStr+="<td><a href='#'>" + startNum + "</a></td>";
                    
                    startNum++;
                }
            }
            tableStr+="</tr>";
            
        }
        tableStr+="</table>";
        System.out.println(tableStr);

    }

    /***
     * 根据年月返回相关的行数
     * 
     * @param year
     * @param month
     * @return
     * @throws Exception
     */
    public static int getRows(int year, int month) throws Exception {
        int num = 0;// 标记月份第一天从周几开始
        int rows = 0;// 标记本月分共有多少行

        // 得到月份一号是星期几
        String week = getWeekOfFirstDay(year, month);
        if (week.equals("星期日")) {
            num = 7;
        }
        if (week.equals("星期一")) {
            num = 6;
        }
        if (week.equals("星期二")) {
            num = 5;
        }
        if (week.equals("星期三")) {
            num = 4;
        }
        if (week.equals("星期四")) {
            num = 3;
        }
        if (week.equals("星期五")) {
            num = 2;
        }
        if (week.equals("星期六")) {
            num = 1;
        }
        int currentMonthNum = getCurrentMonthLastDay();// 获取指定的年份月份共有多少天
        int num1 = 0;// 取余的值
        int num2 = 0;// 取整的值
        int num3 = 0;// 除不尽+2
        int num4 = 0;// 除尽+1
        num1 = (currentMonthNum - num) % 7;
        num2 = (currentMonthNum - num) / 7;
        num3 = num2 + 2;
        num4 = num2 + 1;
        rows = num1 == 0 ? num4 : num3;

        return rows;
    }

    /***
     * 返回第一天处于第几个位置
     * 
     * @param year
     * @param month
     * @return
     * @throws Exception
     */
    public static int getStartNum(int year, int month) throws Exception {
        int num = 0;
        // 得到月份一号是星期几
        String week = getWeekOfFirstDay(year, month);
        if (week.equals("星期日")) {
            num = 1;
        }
        if (week.equals("星期一")) {
            num = 2;
        }
        if (week.equals("星期二")) {
            num = 3;
        }
        if (week.equals("星期三")) {
            num = 4;
        }
        if (week.equals("星期四")) {
            num = 5;
        }
        if (week.equals("星期五")) {
            num = 6;
        }
        if (week.equals("星期六")) {
            num = 7;
        }
        return num;
    }

    /**
     * 返回指定月份的第一天是周几
     * 
     * @return
     * @throws Exception
     */
    public static String getWeekOfFirstDay(int year, int month)
            throws Exception {
        String str = year + "-" + month + "-" + "01";
        return getWeekOfDate(DateUtil.dateFormat(str));
    }

    /**
     * 获取当前日期是星期几
     * 
     * @param dt
     * @return 当前日期是星期几
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);

        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0)
            w = 0;

        return weekDays[w];
    }

    /**
     * 取得当月天数
     * */
    public static int getCurrentMonthLastDay() {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
        a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
        int maxDate = a.get(Calendar.DATE);
        return maxDate;
    }

    /**
     * 得到指定月的天数
     * */
    public static int getMonthLastDay(int year, int month) {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.YEAR, year);
        a.set(Calendar.MONTH, month - 1);
        a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
        a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
        int maxDate = a.get(Calendar.DATE);
        return maxDate;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值