您的位置:首页 > 其它

根据当前时间取得星期一跟星期天的日期

2011-04-11 11:47 423 查看
上次自己的写法是错误的!!!

package com.boxun.crm.util.mgrtime;

import java.text.SimpleDateFormat;

import java.util.Date;

@SuppressWarnings("unused")
/**
 * 创建人:妖孽
 * 创建时间:2011-04-11  修改时间2011-04-26
 * 功能:获取当前时间——星期一跟星期天的日期
 */
public class TimeTake {

	public String[] getTime(){
		SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd"); 
		SimpleDateFormat Fm = new SimpleDateFormat("E"); 
		String time = dateFm.format(new Date());  //当前时间
		String d = Fm.format(new Date()); //星期几
		String xingYi = "";  //星期一的时间
		String xingTi = "";  //星期天的时间
		String[] timeArr = time.split("-");
		int yyy = Integer.parseInt(timeArr[0]);  //取得当前时间的年
		int MMM = Integer.parseInt(timeArr[1]);  //取得当前时间的月
		int ddd = Integer.parseInt(timeArr[2]);  //取得当前时间的天
		TimeTake t = new TimeTake();
		int[] timeArray = new int[6];
		if ("星期一".equals(d) || "星期一" == d) {
			//返回年份、月份跟星期一或星期天的日期
			timeArray = t.tianShu(ddd, MMM, 1, yyy, 0, 6);
		}else if("星期二".equals(d) || "星期二" == d){
			timeArray = t.tianShu(ddd, MMM, 2, yyy, 1, 5);
		}else if("星期三".equals(d) || "星期三" == d){
			timeArray = t.tianShu(ddd, MMM, 3, yyy, 2, 4);
		}else if("星期四".equals(d) || "星期四" == d){
			timeArray = t.tianShu(ddd, MMM, 4, yyy, 3, 3);
		}else if("星期五".equals(d) || "星期五" == d){
			timeArray = t.tianShu(ddd, MMM, 5, yyy, 4, 2);
		}else if("星期六".equals(d) || "星期六" == d){
			timeArray = t.tianShu(ddd, MMM, 6, yyy, 5, 1);
		}else if("星期天".equals(d) || "星期天" == d){
			timeArray = t.tianShu(ddd, MMM, 7, yyy, 6, 0);
		}else{
			System.out.println("黑色星期八");
			return null;
		}
		return new String[]{timeArray[0]+"-"+timeArray[1]+"-"+timeArray[4] , timeArray[2]+"-"+timeArray[3]+"-"+timeArray[5]};
	}

	/*
	 * 判断当前月份是大月还是小月
	 * 返回月份共有多少天
	 */
	public int panDuanDaXiao(int MM,int yyy){
		//如果是二月份
		if(MM == 2){
			//如果是闰年
			if( yyy % 4 == 0 && yyy % 100 != 0 || yyy % 400 == 0 )
			{
				return 29;
			}
			else
			{
				return 28;
			} 
		}
		//如果是小于七月份的单月
		if(MM <= 7 && MM % 2 != 0){
			return 31;
		}
		//如果是小于七月份的双月、二月份除外
		if(MM < 7 && MM % 2 == 0){
			return 30 ;
		}

		//如果是大于等于8月份的单月
		if(MM >= 8 && MM % 2 != 0){
			return 30;
		}
		//如果是大于等于8月份的双月
		if(MM >= 8 && MM % 2 == 0){
			return 31;
		}
		return 0;
	}

	/*
	 * 计算星期天跟星期一的天数
	 * 返回年份、月份(星期一/星期天)跟星期一或星期天的日期
	 * 参数dd为当前天数,MM为当前月数、ee为当前星期数,yyy为当前年数,can1为距离星期一的天数,can1为距离星期天的天数
	 * 其中can1跟can2最为重要
	 */
	public int[] tianShu(int dd, int MM ,int ee,int yyy,int can1,int can2){

		int xiYi = 0 ;  //星期一的日期天数
		int xiTi = 0;  //星期天的日期天数
		TimeTake t = new TimeTake();
		int mmNum = t.panDuanDaXiao(MM, yyy);  //取得月份天数
		int mmNum1 = t.panDuanDaXiao(MM - 1, yyy);  //取得上一个月的月份天数

		int yiMM = MM ;  //星期一的月份
		int tiMM = MM;  //星期天的月份
		
		int yiYYY = yyy;  //星期一的年份
		int tiYYY = yyy;  //星期天的年份
		
		
		//如果当前天数减去星期数大于等于0、不用返回上一个月计算
		if( dd - ee >= 0 ){
			if(1 == ee){
				xiYi = dd ;
			}else{
				xiYi = dd - can1 ;  //星期一的日期天数
			}
		}else{
			//如果当前月份不等于1月
			if(yiMM > 1 ){
				yiMM = yiMM - 1 ; //当前月份减一
			}else{
				yiMM = 12 ;
				yiYYY = yiYYY - 1 ;
			}
			xiYi = mmNum1 + dd - ee ; //星期一的日期天数
		}
		
		
		//如果星期天的日期天数小于等于月份天数
		if(7 == ee){
			xiTi = dd ;
		}else{
			xiTi = dd  + can2 ;
		}
		//如果星期天的日期小于等于当前月份日期
		if(xiTi <= mmNum){
			return new int [] {yiYYY,yiMM,tiYYY,tiMM,xiYi,xiTi};
		}else{
			xiTi = xiTi - mmNum ; //星期天的日期天数
			//如果当前月份不等于12月
			if(tiMM < 12 ){
				tiMM = tiMM + 1 ; //当前月份加一
			}else{
				tiMM = 1 ;
				tiYYY = tiYYY + 1 ;
			}
			return new int[]{yiYYY,yiMM,tiYYY,tiMM, xiYi , xiTi};
		}

	}
}




还好、测试的时候、刚刚给了我这样一个机会改正。奶奶的、以前的写法在跨月跟跨年的时候、就会错得非常离谱
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐