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
如有更好的写法,更加简洁,求赐教!
- java Calendar 按月输出日历
- Calendar java日历
- Java日历类Calendar
- java Calendar日历类
- java Calendar类(日历)
- java的Calendar(日历)类
- java的Calendar(日历)类
- java日历的使用(Calendar)
- java Calendar 日历的打印
- java 之 Calendar 日历类
- Java使用Calendar类在控制台输出指定年份和月份的日历
- java 输出当月日历
- java输出当月日历
- Java 输出日历格式
- JAVA 输出日历
- java实现输出日历
- Java日历横向输出
- Java 输出日历格式
- 分布式系统漫谈一 —— Google三驾马车: GFS,mapreduce,Bigtable
- html中插入flash代码详解
- mysql命令行客户端连接mysql,端口非3306使用连接
- js控制css总结
- hdu 4885 TIANKENG’s travel (最短路+判断三点共线)
- java Calendar 按月输出日历
- 可信计算模块MTM介绍
- 表
- 有关Windows平台下CPU使用率的计算
- 'powershell' is not recognized as an internal or external command, operable program or batch file
- web开发设计--js数据类型,js运算符
- gdb反汇编详解C函数底层实现笔记(程序堆栈、内存分配)
- ImageWithColor 图片由颜色值生成
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)