DateUtil(时间处理函数工具)

时间处理函数工具:得到时间戳,周一,周末,时间更改,时间精确计算。。。。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;

/**
 * 时间处理函数
 * 
 * @20080509 15:50
 */
public class DateUtil {

	private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
	
	public static final String TIME_YEAR = "yyyy";
	
	public static final String TIME_MONEN = "MM";
	
	public static final String TIME_DAY = "dd";

	public static String getDate(String interval, Date starttime, String pattern) {
		Calendar temp = Calendar.getInstance(TimeZone.getDefault());
		temp.setTime(starttime);
		temp.add(temp.MONTH, Integer.parseInt(interval));
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(temp.getTime());
	}

	/**
	 * 将字符串类型转换为时间类型
	 * 
	 * @return
	 */
	public static Date str2Date(String str) {
		Date d = null;
		SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_PATTERN);
		try {
			d = sdf.parse(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return d;
	}

	public static Date str2Date(String str, String pattern) {
		Date d = null;
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		try {
			d = sdf.parse(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return d;
	}

	/**
	 * 将时间格式化
	 * 
	 * @return
	 */
	public static Date DatePattern(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_PATTERN);
		try {
			String dd = sdf.format(date);
			date = str2Date(dd);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 将时间格式化
	 */
	public static Date DatePattern(Date date, String pattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		try {
			String dd = sdf.format(date);
			date = str2Date(dd, pattern);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return date;
	}

	public static String date2Str(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_PATTERN);
		return sdf.format(date);
	}

	public static String date2Str(Date date, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(date);
	}

	/**
	 * 获取昨天
	 * 
	 * @param date
	 * @return
	 * @throws Exception
	 */
	public static Date getLastDate(Date date) {
		Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
		calendar.setTime(date);

		calendar.add(calendar.DATE, -1);

		return str2Date(date2Str(calendar.getTime()));
	}
	/**
	 * 获取前几天
	 * @param date
	 * @return
	 */
	public static Date getBeforeDate(Date date,int dates) {
		Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
		calendar.setTime(date);

		calendar.add(calendar.DATE, -dates);

		return str2Date(date2Str(calendar.getTime()));
	}

	/**
	 * 获取上周第一天(周一)
	 * 
	 * @param date
	 * @return
	 * @throws Exception
	 */
	public static Date getLastWeekStart(Date date) {
		Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
		calendar.setTime(date);
		int i = calendar.get(calendar.DAY_OF_WEEK) - 1;
		int startnum = 0;
		if (i == 0) {
			startnum = 7 + 6;
		} else {
			startnum = 7 + i - 1;
		}
		calendar.add(calendar.DATE, -startnum);

		return str2Date(date2Str(calendar.getTime()));
	}

	/**
	 * 获取上周最后一天(周末)
	 * 
	 * @param date
	 * @return
	 * @throws Exception
	 */
	public static Date getLastWeekEnd(Date date) {
		Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
		calendar.setTime(date);
		int i = calendar.get(calendar.DAY_OF_WEEK) - 1;
		int endnum = 0;
		if (i == 0) {
			endnum = 7;
		} else {
			endnum = i;
		}
		calendar.add(calendar.DATE, -(endnum - 1));

		return str2Date(date2Str(calendar.getTime()));
	}
	
	/**
	 * 根据年和月得到天数
	 * @param num 月
	 * @param year 年
	 * @return
	 */
	public static int getday(int num,int year){
		if(num==1 || num==3 || num==5 || num==7 || num==8 || num==10 || num==12){
			return 31;
		}else if(num==2){
			//判断是否为闰年
			if(year%400==0 || (year%4==0 && year%100!=0)){
				return 29;
			}else{
				return 28;
			}
			
		}else{
			return 30;
		}
	}
	/*
	 * 计算当前日期距离下个月还有多少天
	 */
	public static int getdaymis(Date time){
		int year = Integer.parseInt(
				new SimpleDateFormat(TIME_YEAR).format(time));//年
		
		int mm = Integer.parseInt(
				new SimpleDateFormat(TIME_MONEN).format(time));//月
		
		int dd = Integer.parseInt(
				new SimpleDateFormat(TIME_DAY).format(time));//日
		
		
		//获取当前年月的总天数
		int sdd = getday(mm,year);
		
		return sdd-dd;
		
		
	}
	/**
	 * 日期转秒数
	 * @param dateString
	 * @return
	 */
	public static long getTime(String dateString) {
	    long time = 0;
	    try {
		    Date ret = null;
		    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		    ret = sdf.parse(dateString);
		    time = ret.getTime()/1000;
	    } catch (Exception e) {
		
	    }
	    return time;
    }
	
	
	/**
	 * 精确计算时间差,精确到日
	 * @param fistill 起始日期
	 * @param nowtime 结束日期
	 * @param type type为1返回年月日(如:2年3个月零5天) 否则返回总的天数
	 * @return
	 */
	public static String patienage(Date fistill,Date nowtime,Integer type){
		
		int fyear = Integer.parseInt(
				new SimpleDateFormat(TIME_YEAR).format(fistill));//起始年
		
		int fmm = Integer.parseInt(
				new SimpleDateFormat(TIME_MONEN).format(fistill));//起始月
		
		int fdd = Integer.parseInt(
				new SimpleDateFormat(TIME_DAY).format(fistill));//起始日
		
		
		int nyear = Integer.parseInt(
				new SimpleDateFormat(TIME_YEAR).format(nowtime));//结束年
		
		int nmm = Integer.parseInt(
				new SimpleDateFormat(TIME_MONEN).format(nowtime));//结束月
		
		int ndd = Integer.parseInt(
				new SimpleDateFormat(TIME_DAY).format(nowtime));//结束日
		
		int cyear = nyear - fyear;
		int cmm = nmm - fmm;
		int cdd = ndd - fdd;
		
		
		int zyear = 0;
		int zmm = 0;
		int zdd = 0;
		
		int countddd = 0;  //年月日累计天数
		
		if(cdd<0){
			if(cmm<0){
				zyear = cyear - 1;
				zmm = (cmm + 12)-1; 
				int dd = getday(zmm,nyear-1);
				zdd = dd + cdd;
				
				
				countddd = zyear*365+zmm*30+zdd;
				
			}else if(cmm==0){
				zyear = cyear - 1;
				zmm = 12-1; 
				int dd = getday(zmm,nyear-1);
				zdd = dd + cdd;
				
				countddd = zyear*365+zmm*30+zdd;
				
			}else{
				zyear = cyear;
				zmm = cmm - 1; 
				int dd = getday(zmm,nyear);
				zdd = dd + cdd;
				
				countddd = zyear*365+zmm*30+zdd;
				
			}
		}else if(cdd==0){
			if(cmm<0){
				zyear = cyear - 1;
				zmm = cmm + 12; 
				zdd = 0;
				
				countddd = zyear*365+zmm*30;
				
			}else if(cmm==0){
				zyear = cyear;
				zmm = 0; 
				zdd = 0;
				
				countddd = zyear*365+zmm*30;
				
			}else{
				zyear = cyear;
				zmm = cmm; 
				zdd = 0;
				
				countddd = zyear*365+zmm*30;
			}
		}else{
			if(cmm<0){
				zyear = cyear - 1;
				zmm = cmm + 12; 
				zdd = cdd;
				
				countddd = zyear*365+zmm*30+zdd;
			}else if(cmm==0){
				zyear = cyear;
				zmm = 0; 
				zdd = cdd;
				
				countddd = zyear*365+zmm*30+zdd;
			}else{
				zyear = cyear;
				zmm = cmm; 
				zdd = cdd;
				
				countddd = zyear*365+zmm*30+zdd;
			}
		}
		String ptime = null;
		
		if(zdd!=0){
			if(zmm!=0){
				if(zyear!=0){
					ptime = zyear+"年"+zmm+"个月"+"零"+zdd+"天";
				}else{
					ptime = zmm+"个月"+"零"+zdd+"天";
				}
			}else{
				if(zyear!=0){
					ptime = zyear+"年"+"零"+zdd+"天";
				}else{
					ptime = zdd+"天";
				}
			}
		}else{
			if(zmm!=0){
				if(zyear!=0){
					ptime = zyear+"年"+zmm+"个月";
				}else{
					ptime = zmm+"个月";
				}
			}else{
				if(zyear!=0){
					ptime = zyear+"年";
				}else{
					ptime = null;
				}
			}
		}
		if(type==1){
			return ptime;   //返回年月日(如:2年3个月零5天)
		}else{
			return String.valueOf(countddd);  //返回总天数
		}
		
		
	}
	/**
	 * 得到月数
	 * @param year 年数差
	 * @param month 月数差
	 * @return
	 */
	public static int getCmm(Integer year,Integer month){
		int zmm = 0;
		if(month < 0){
			zmm = (month + 12)+(year-1)*12;
		}else if(month == 0){
			zmm = year*12;
		}else{
			zmm = year*12+month;
		}
		return zmm;
	}
	
	

	/**
	 * 改更现在时间
	 */
	public static Date changeDate(String type, int value) {
		Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
		if (type.equals("month")) {
			calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + value);
		} else if (type.equals("date")) {
			calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + value);
		}
		return calendar.getTime();
	}

	/**
	 * 更改时间
	 */
	public static Date changeDate(Date date, String type, int value) {
		if (date != null) {
			// Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(date);
			// Calendar calendar = Calendar.
			if (type.equals("month")) {
				calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + value);
			} else if (type.equals("date")) {
				calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + value);
			} else if (type.endsWith("year")) {
				calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + value);
			}
			return calendar.getTime();
		}
		return null;
	}

	/**
	 * haoxw 比较时间是否在这两个时间点之间
	 * 
	 * @param time1
	 * @param time2
	 * @return
	 */
	public static boolean checkTime(String time1, String time2) {
		Calendar calendar = Calendar.getInstance();
		Date date1 = calendar.getTime();
		Date date11 = DateUtil.str2Date(DateUtil.date2Str(date1, "yyyy-MM-dd") + " " + time1);// 起始时间

		Calendar c = Calendar.getInstance();
		c.add(Calendar.DATE, 1);
		Date date2 = c.getTime();
		Date date22 = DateUtil.str2Date(DateUtil.date2Str(date2, "yyyy-MM-dd") + " " + time2);// 终止时间

		Calendar scalendar = Calendar.getInstance();
		scalendar.setTime(date11);// 起始时间

		Calendar ecalendar = Calendar.getInstance();
		ecalendar.setTime(date22);// 终止时间

		Calendar calendarnow = Calendar.getInstance();

		if (calendarnow.after(scalendar) && calendarnow.before(ecalendar)) {
			return true;
		} else {
			return false;
		}

	}
	
	/**
	 * haoxw 比较时间是否在这两个时间点之间
	 * 
	 * @param date11
	 * @param date22
	 * @return
	 */
	public static boolean checkTime(Date date11, Date date22) {
		
		

		Calendar scalendar = Calendar.getInstance();
		scalendar.setTime(date11);// 起始时间

		Calendar ecalendar = Calendar.getInstance();
		ecalendar.setTime(date22);// 终止时间

		Calendar calendarnow = Calendar.getInstance();

		if (calendarnow.after(scalendar) && calendarnow.before(ecalendar)) {
			return true;
		} else {
			return false;
		}

	}

	
	public static boolean checkDate(String date1, String date2) {

		Date date11 = DateUtil.str2Date(date1, "yyyy-MM-dd HH:mm:ss");// 起始时间

		Date date22 = DateUtil.str2Date(date2, "yyyy-MM-dd HH:mm:ss");// 终止时间

		Calendar scalendar = Calendar.getInstance();
		scalendar.setTime(date11);// 起始时间

		Calendar ecalendar = Calendar.getInstance();
		ecalendar.setTime(date22);// 终止时间

		Calendar calendarnow = Calendar.getInstance();

		System.out.println(date11.toString());
		System.out.println(date22.toString());
		System.out.println(scalendar.toString());
		System.out.println(ecalendar.toString());
		System.out.println(calendarnow.toString());

		if (calendarnow.after(scalendar) && calendarnow.before(ecalendar)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 获取interval天之前的日期
	 * 
	 * @param interval
	 * @param starttime
	 * @param pattern
	 * @return
	 */
	public static Date getIntervalDate(String interval, Date starttime, String pattern) {
		Calendar temp = Calendar.getInstance();
		temp.setTime(starttime);
		temp.add(temp.DATE, Integer.parseInt(interval));
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		String shijian = sdf.format(temp.getTime());
		return str2Date(shijian);
	}
    
	public static Date formatDate(Date date){
		SimpleDateFormat bartDateFormat = 
		new SimpleDateFormat("yyyy-MM-dd"); 		
		System.out.println(bartDateFormat.format(date)); 
		SimpleDateFormat bartDateFormat1 =new SimpleDateFormat("yyyy-MM-dd"); 			
		try {
			Date date1 = bartDateFormat1.parse(bartDateFormat.format(date));
		} catch (ParseException e) {				
			e.printStackTrace();
		} 
		System.out.println(date.getTime());
		return date; 

	}
	
	public static void main(String arf[]) {

		/*String time1 = "2009-05-07 19:20:00";
		String time2 = "2009-05-08 19:30:00";

		DateUtil d = new DateUtil();
		System.out.println(d.checkDate(time1, time2));
		System.out.println(d.date2Str(new Date()));*/

		//System.out.println(d.getIntervalDate("-3", new Date(), DEFAULT_PATTERN));
		Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
		System.out.println(calendar.toString());
		System.out.println(DateUtil.str2Date("20090731","yyyyMMdd"));
		
		System.out.println(DateUtil.getBeforeDate(new Date(),2 ));
		System.out.println(DateUtil.DatePattern(new Date()));
		
	    SimpleDateFormat bartDateFormat = 
		new SimpleDateFormat("yyyy-MM-dd"); 
		Date date = new Date(); 
		System.out.println("date;"+bartDateFormat.format(date)); 
		SimpleDateFormat bartDateFormat1 =new SimpleDateFormat("yyyy-MM-dd"); 			
		try {
			Date date1 = bartDateFormat1.parse(bartDateFormat.format(date));
			System.out.println("日期:"+date1); 
		} catch (ParseException e) {				
			e.printStackTrace();
		} 
		
	}
 /**
	 * hxw 返回当前年
	 * 
	 * @return
	 */
	public static String getYear() {
		Calendar calendar = Calendar.getInstance();
		return String.valueOf(calendar.get(1));
	}

	/**
	 * hxw 返回当前月
	 * 
	 * @return
	 */
	public static String getMonth() {
		Calendar calendar = Calendar.getInstance();
		String temp = String.valueOf(calendar.get(2) + 1);
		if (temp.length() < 2)
			temp = "0" + temp;
		return temp;
	}
  }

 

/**
	 * 比较时间是否在某个时间范围内
	 * @param stim  范围起始时间
	 * @param etim  范围结束时间
	 * @param ztim  要判断比较的时间
	 * @return
	 * @throws ParseException
	 */
	public static int comparedate(String stim,String etim,String ztim) throws ParseException{
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Long startM = sdf.parse(stim).getTime();
		Long endM = sdf.parse(etim).getTime();
		Long ztimM = sdf.parse(ztim).getTime();
		long result1 = ztimM - startM;
		long result2 = ztimM - endM;
		
		if(result1>=0 && result2<=0){
			return 1;  //在范围内
		}else{
			return 0; //不在范围内
		}
		
	}
	
	/**  
	 * 得到开始时间与结束时间之间的每一天(格式为yyyyMMdd HH:mm:ss 的字符串)
	 * long result 开始时间与结束时间之间相差的天数
	 * StringBuffer sbsb 将每一个循环遍历的时间拼接成yyyyMMdd HH:mm:ss 的字符串格式
	 * List<String> tlist 存放yyyyMMdd HH:mm:ss 字符串格式时间的集合
	 * startime 开始时间 (格式yyyy-MM-dd)
	 * endtime  结束时间 (格式yyyy-MM-dd)
	 * */
	public static List<String> getdiffertimes(String startime,String endtime){
		//计算相差天数
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Long startM = (long) 0;
		try {
			startM = sdf.parse(startime).getTime();
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		Long endM = (long) 0;
		try {
			endM = sdf.parse(endtime).getTime();
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		long result = (endM - startM) / (24 * 60 * 60 * 1000);
		System.out.println("差:" + result + "天"); 
		//以字符串形式循环得到每一天
		Date startDate = null;
		try {
			startDate = new SimpleDateFormat(RequestStatic.DATE_FORMAT).parse(startime);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Calendar startTime = Calendar.getInstance();
		startTime.clear();
		startTime.setTime(startDate);
		StringBuffer sb= null;
		//存放始发时间的集合
		List<String> tlist = new ArrayList<String>();
		for (int i = 0; i <= (int)result;i++) {
			sb = new StringBuffer();
			
			String strtime = String.valueOf(startTime.get(Calendar.YEAR));
			
			sb.append(strtime);
			
			if((startTime.get(Calendar.MONTH)+1)<10){
				sb.append("0").append((startTime.get(Calendar.MONTH)+1));
			}else{
				sb.append((startTime.get(Calendar.MONTH)+1));
			}
			
			if(startTime.get(Calendar.DAY_OF_MONTH)<10){
				sb.append("0").append(startTime.get(Calendar.DAY_OF_MONTH));
			}else{
				sb.append(startTime.get(Calendar.DAY_OF_MONTH));
			}
			sb.append(" 00:00:00");
			
			tlist.add(sb.toString());
			
			startTime.add(Calendar.DAY_OF_YEAR, 1);
		}
		System.out.println(startime+"与"+endtime+"之间的每一天:");
		for(int i =0;i<tlist.size();i++){
			System.out.println(tlist.get(i));
		}
		return tlist;
	}
	
	
	/**
	 * 将2014-03-05 转换为 05Mar14格式
	 * @param date
	 * @return
	 */
	public static String formdateEn(String date){
		   
		Date trfrodate = null;    //05Mar14 格式日期
		try {
			trfrodate = new SimpleDateFormat(RequestStatic.DATE_FORMAT).parse(date);
		} catch (java.text.ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		String datef = String.valueOf(trfrodate);
		
		return datef.split(" ")[2]+datef.split(" ")[1]+datef.substring(datef.length()-2);
				    
	}
	

 

你可能感兴趣的:(java,Date,时间戳,获取周一,计算时间相差年月日)