java 根据输入的年月计算出这个月有几周

例如我输入某年某月后就自动显示出当月每周的开始日和结束日。比如我输入:2009-12 会算出
1日——5日 第一周
6日——12日 第二周
13日——19日 第三周
20日——26日 第四周
27日——至31日 第五周

请各位大侠帮我看看应该怎样实现。谢谢了

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParsePosition;
import java.util.GregorianCalendar;

/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Untitled1
{
public Untitled1()
{
}
/**
* 判断是否润年
*
* @param ddate
* @return
*/
public static boolean isLeapYear(String ddate) {

/**
* 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
* 3.能被4整除同时能被100整除则不是闰年
*/
Date d = strToDate(ddate);
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(d);
int year = gc.get(Calendar.YEAR);
if ((year % 400) == 0)
return true;
else if ((year % 4) == 0) {
if ((year % 100) == 0)
return false;
else
return true;
} else
return false;
}

/**
* 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
*/
public static String getNextDay(String nowdate, String delay) {
try{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String mdate = "";
Date d = strToDate(nowdate);
long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
d.setTime(myTime * 1000);
mdate = format.format(d);
return mdate;
}catch(Exception e){
return "";
}
}

/**
* 将短时间格式字符串转换为时间 yyyy-MM-dd
*
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 获取一个月的最后一天
*
* @param dat
* @return
*/
public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
String str = dat.substring(0, 8);
String month = dat.substring(5, 7);
int mon = Integer.parseInt(month);
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
str += "31";
} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
str += "30";
} else {
if (isLeapYear(dat)) {
str += "29";
} else {
str += "28";
}
}
return str;
}
/**
* 根据一个日期,返回是星期几的字符串
*
* @param sdate
* @return
*/
public static String getWeek(String sdate) {
// 再转换为时间
Date date = strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
// int hour=c.get(Calendar.DAY_OF_WEEK);
// hour中存的就是星期几了,其范围 1~7
// 1=星期日 7=星期六,其他类推
return new SimpleDateFormat("EEEE").format(c.getTime());
}
public static String getWeekStr(String sdate){
String str = "";
str = getWeek(sdate);
if("1".equals(str)){
str = "星期日";
}else if("2".equals(str)){
str = "星期一";
}else if("3".equals(str)){
str = "星期二";
}else if("4".equals(str)){
str = "星期三";
}else if("5".equals(str)){
str = "星期四";
}else if("6".equals(str)){
str = "星期五";
}else if("7".equals(str)){
str = "星期六";
}
return str;
}

public static String getNowMonth(String sdate) {
// 取该时间所在月的一号
//sdate = sdate.substring(0, 8) + "01";
sdate = sdate + "-01";
// 得到这个月的1号是星期几
Calendar c = Calendar.getInstance();
Date date = strToDate(sdate);
c.setTime(date);
int u = c.get(Calendar.DAY_OF_WEEK);
String newday = getNextDay(sdate, (1 - u) + "");
return newday;
}
public static String getMonthDate(String sdate) {
// 取该时间所在月的一号
//sdate = sdate.substring(0, 8) + "01";
sdate = sdate + "-01";
// 得到这个月的1号是星期几
Calendar c = Calendar.getInstance();
Date date = strToDate(sdate);
c.setTime(date);
int u = c.get(Calendar.DAY_OF_WEEK);
// for(int i=0;i<)
String edate=getEndDateOfMonth(sdate);
String newday;
newday = getNextDay(sdate, (1 - u) + "");
String week;
int i=0,j=1;
System.out.println();
do
{
newday=getNextDay(sdate,""+i++);
week=getWeek(newday);
if(!week.equals("星期日")&&!week.equals("星期六"))
{
System.out.println("第"+(j)+"周");
System.out.print(newday);
System.out.print(week);
System.out.println();
}
if(week.equals("星期六"))j++;
}
while(!newday.equals(edate));
return newday;
}
static public void main(String[] args)
{
getMonthDate("2011-05");
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-09
自己去下载一个my97的时间控件 都有