所有的类和方法都在这里面了,大家可以参考一下,自我感觉写的不是很好,但是效果实现了!
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;
}
}
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;
}
}