java Calendar 按月输出日历

来源:互联网 发布:卖数据的公司 编辑:程序博客网 时间:2024/06/10 13:02

获取一个月的不善言辞,直接贴代码,功能非常实用

package com.umessage.test;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;/** * 获取指定月的日历 * * @author kojon * @date 2014-7-30 * @version 1.0 */public class CalendarUtil {    public static void main(String[] args) {        int year = 2014;        int month = 03;        printCalendar(year, month);        System.out.println("\n获取集合:"+getCalendar(year, month));        System.out.println("\n获取集合:"+getCalendar("2014-06-30"));        System.out.println("\n以周输出:");        getCalendarWeek(year, month);            }        /**     * 根据日期获取当前月数据     * @param date 格式2014-07-30     * @return 月日期集合     */    static List<String> getCalendar(String date) {        return getCalendar(Integer.valueOf(getTime(date,Calendar.YEAR)),(Integer.valueOf(getTime(date,(Calendar.MONTH)))+1));    }    static void printCalendar(int year, int month) {        System.out.println("Calendar for year/mont:" + year +"/"+ (month));        System.out.println("日  |一 |二 |三 |四  |五 |六");        Calendar calendar = Calendar.getInstance();        calendar.set(Calendar.YEAR, year);        calendar.set(Calendar.MONTH, month-1);        //一个月的天数        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);        //每一天进行循环加入        for (int day = 1; day <= maxDay; day++) {            calendar.set(Calendar.DATE, day);            int weekDay=getWeekDay(calendar);            if (day == 1) {                //前一个月的补齐                if (weekDay != 7) {                    calendar.add(Calendar.MONTH, -1);//上一个月                    int beforMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//上个月最大天数                    int befordaycount=weekDay;//第一个月第一天星期几 前面补足几天                    //倒序补齐                    for (int i = 1; i <= weekDay; i++) {                        System.out.print((beforMaxDay+1-befordaycount)+"|");                        befordaycount--;                    }                    calendar.set(Calendar.MONTH, month-1);//恢复原来的月                }            }            System.out.print((day>9?day:"0"+day) + "|");            //保持日历格式  周六换行            if (weekDay == 6) {                System.out.println();            }            //下个月补齐            if(day == maxDay){                if (weekDay != 6) {//非周六才需补齐                    int lastDayCount=weekDay==7?6:(6-weekDay);//星期天还有6天补齐  其余是6-?                    for (int i = 1; i <=lastDayCount ; i++) {                        System.out.print((i>9?i:"0"+i)+"|");                    }                }            }        }    }        static List<String> getCalendar(int year, int month) {        List<String> data=new ArrayList<String>();        Calendar calendar = Calendar.getInstance();        calendar.set(Calendar.YEAR, year);        calendar.set(Calendar.MONTH, month-1);        //一个月的天数        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);        //每一天进行循环加入        for (int day = 1; day <= maxDay; day++) {            calendar.set(Calendar.DATE, day);            int weekDay=getWeekDay(calendar);            if (day == 1) {                //前一个月的补齐                if (weekDay != 7) {                    calendar.add(Calendar.MONTH, -1);//上一个月                    int beforMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//上个月最大天数                    int befordaycount=weekDay;//第一个月第一天星期几 前面补足几天                    //倒序补齐                    for (int i = 1; i <= weekDay; i++) {                        data.add(calendar.get(Calendar.YEAR)+"-"+getValue(calendar.get(Calendar.MONTH)+1)+"-"+getValue(beforMaxDay+1-befordaycount));                        befordaycount--;                    }                    calendar.set(Calendar.MONTH, month-1);//恢复原来的月                }            }            data.add(calendar.get(Calendar.YEAR)+"-"+getValue(calendar.get(Calendar.MONTH)+1)+"-"+getValue(day));            //下个月补齐            if(day == maxDay){                if (weekDay != 6) {//非周六才需补齐                    int lastDayCount=weekDay==7?6:(6-weekDay);//星期天还有6天补齐  其余是6-?                    for (int i = 1; i <=lastDayCount ; i++) {                        data.add(year+"-"+getValue(month+1)+"-"+getValue(i));                    }                }            }        }        return data;    }        public static void getCalendarWeek(int year, int month){         try {            List<String>  calendar= getCalendar(year, month);            int n=1;             for (int i = 0; i < calendar.size(); i+=7) {                 System.out.println("第["+n+"]周");                  //一周为周期                  for (int j = 0; j < 7; j++) {                       int index=i+j;                       //亲,在此写你的业务逻辑                       System.out.println(calendar.get(index));                 }                  n++;            }        } catch (Exception e) {            e.printStackTrace();        }   }        /**     * 十以下前补0     * @param num     * @return     */    private static String getValue(int num){        return String.valueOf(num>9?num:("0"+num));    }        /**     * 获取星期1-7     * @param calendar     * @return     */    static int getWeekDay(Calendar calendar){        int weekDay = calendar.get(Calendar.DAY_OF_WEEK)-1;        return weekDay==0?7:weekDay;    }        /**     * 字符串日期,获取年、月、日、星期等     *      * @param date     * @param value      *     年:Calendar.YEAR     *  月:Calendar.MONTH 注意:以0开始计算的     *  日:Calendar.DATE      *  星期:Calendar.MONDAY 等     *     参见Calendar中的变量     * @return     */    static String getTime(String date,int value){        Calendar ca=Calendar.getInstance();        ca.setTime(string2Date(date));        return String.valueOf(ca.get(value));    }        static String  date2String(Date date){        return new SimpleDateFormat("yyyy-MM-dd").format(date);    }        static Date  string2Date(String date){        try {            return new SimpleDateFormat("yyyy-MM-dd").parse(date);        } catch (ParseException e) {            e.printStackTrace();        }        return null;    }}
输出结果:

Calendar for year/mont:2014/3
日  |一 |二 |三 |四  |五 |六
23|24|25|26|27|28|01|
02|03|04|05|06|07|08|
09|10|11|12|13|14|15|
16|17|18|19|20|21|22|
23|24|25|26|27|28|29|
30|31|01|02|03|04|05|
获取集合:[2014-02-23, 2014-02-24, 2014-02-25, 2014-02-26, 2014-02-27, 2014-02-28, 2014-03-01, 2014-03-02, 2014-03-03, 2014-03-04, 2014-03-05, 2014-03-06, 2014-03-07, 2014-03-08, 2014-03-09, 2014-03-10, 2014-03-11, 2014-03-12, 2014-03-13, 2014-03-14, 2014-03-15, 2014-03-16, 2014-03-17, 2014-03-18, 2014-03-19, 2014-03-20, 2014-03-21, 2014-03-22, 2014-03-23, 2014-03-24, 2014-03-25, 2014-03-26, 2014-03-27, 2014-03-28, 2014-03-29, 2014-03-30, 2014-03-31, 2014-04-01, 2014-04-02, 2014-04-03, 2014-04-04, 2014-04-05]

获取集合:[2014-06-01, 2014-06-02, 2014-06-03, 2014-06-04, 2014-06-05, 2014-06-06, 2014-06-07, 2014-06-08, 2014-06-09, 2014-06-10, 2014-06-11, 2014-06-12, 2014-06-13, 2014-06-14, 2014-06-15, 2014-06-16, 2014-06-17, 2014-06-18, 2014-06-19, 2014-06-20, 2014-06-21, 2014-06-22, 2014-06-23, 2014-06-24, 2014-06-25, 2014-06-26, 2014-06-27, 2014-06-28, 2014-06-29, 2014-06-30, 2014-07-01, 2014-07-02, 2014-07-03, 2014-07-04, 2014-07-05]

以周输出:
第[1]周
2014-02-23
2014-02-24
2014-02-25
2014-02-26
2014-02-27
2014-02-28
2014-03-01
第[2]周
2014-03-02
2014-03-03
2014-03-04
2014-03-05
2014-03-06
2014-03-07
2014-03-08
第[3]周
2014-03-09
2014-03-10
2014-03-11
2014-03-12
2014-03-13
2014-03-14
2014-03-15
第[4]周
2014-03-16
2014-03-17
2014-03-18
2014-03-19
2014-03-20
2014-03-21
2014-03-22
第[5]周
2014-03-23
2014-03-24
2014-03-25
2014-03-26
2014-03-27
2014-03-28
2014-03-29
第[6]周
2014-03-30
2014-03-31
2014-04-01
2014-04-02
2014-04-03
2014-04-04
2014-04-05

如有更好的写法,更加简洁,求赐教!



0 0
原创粉丝点击