时间DateUtils工具类

package com.item.utils;

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

import org.apache.commons.lang.time.DateFormatUtils;

public class DateUtils {

	private DateUtils() {
	}

	public static String format(Date date) {
		try {
			return DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss");
		} catch (Exception e) {
			// TODO: handle exception
			return null;
		}
	}
	
	public static String format(Date date,String pattern) {
		try {
			return DateFormatUtils.format(date, pattern);
		} catch (Exception e) {
			// TODO: handle exception
			return null;
		}
	}
	
	/**
	 * 日期累加
	 * 
	 * @param format
	 *            返回的日期格式
	 * @param StrDate
	 *            要累加的日期
	 * @param year
	 *            加多少年
	 * @param month
	 *            加多少个月
	 * @param day
	 *            加多少天
	 * @return
	 */
	public static String GetSysDate(String format, String StrDate, int year,
			int month, int day) {
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat sFmt = new SimpleDateFormat(format);
		cal.setTime(sFmt.parse((StrDate), new ParsePosition(0)));

		if (day != 0) {
			cal.add(cal.DATE, day);
		}
		if (month != 0) {
			cal.add(cal.MONTH, month);
		}
		if (year != 0) {
			cal.add(cal.YEAR, year);
		}
		return sFmt.format(cal.getTime());
	}

	public static long getInterval(String begin, String end) {
		try {
			Date beginTime = DateUtils.parse(begin, "yyyy-MM-dd");
			Date endTime = DateUtils.parse(end, "yyyy-MM-dd");
			long day = 0;
			day = (beginTime.getTime() - endTime.getTime()) / (24 * 60 * 60 * 1000);
			return day;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static String getDelay(String now, Integer delay, String pattern, Integer time) {
		String delayDate = null;
		try {
			Date date = parse(now, pattern);
			long delayTime = (date.getTime() / 1000) + delay * time;
			date.setTime(delayTime * 1000);
			delayDate = DateFormatUtils.format(date, pattern);

			return delayDate;
		} catch (Exception e) {
			return null;
		}
	}

	public static String getPreMonthFirst(String now, Integer delay, String pattern) {
		Calendar c = Calendar.getInstance();
		c.setTime(parse(now, pattern));
		c.set(Calendar.DATE, 1);
		c.add(Calendar.MONTH, -1);
		
		return DateFormatUtils.format(c, "yyyy-MM-dd");
	}
	
	public static String getDelayDay(String now, Integer delay, String pattern) {
		return getDelay(now, delay, pattern, 24 * 60 * 60);
	}

	public static String getDelayHour(String now, Integer delay, String pattern) {
		return getDelay(now, delay, pattern, 60 * 60);
	}

	public static String getDelayMinute(String now, Integer delay,
			String pattern) {
		return getDelay(now, delay, pattern, 60);
	}

	public static Date parse(String date, String pattern) {
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		ParsePosition pos = new ParsePosition(0);

		return format.parse(date, pos);
	}
	public static Date parse(String date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		ParsePosition pos = new ParsePosition(0);
		return format.parse(date, pos);
	}


	public static String getWeek(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		
		return DateFormatUtils.format(c, "EEEE");
	}
	// 获取前count天
	public static String getAddCountDay(int count,String day){
			
		SimpleDateFormat simpleDate2 = new SimpleDateFormat("yyyy-MM-dd");
		// 指定日期/时间分析是否不严格 ,false为严格
		simpleDate2.setLenient(false);	
		Date myDate;
		try {
			myDate = simpleDate2.parse(day);
			 Long myTime=(myDate.getTime()/1000)+60*60*24*count;
			 myDate.setTime(myTime*1000);
			 // 返回String
			 return  simpleDate2.format(myDate);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
		}
		
		return day;
	}
	/**
	 * 	对比两个字符串格式的日期,返回相差日期
	 *  如果date1比date2大,返回负数。
	 * **/
	public static int contrastStringDate(String date1,String date2){
		
		   int day=0; 	   
		   
		   SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
		   
		   GregorianCalendar calendar1=new GregorianCalendar();
		   GregorianCalendar calendar2=new GregorianCalendar();
		  //String s1="2006-04-21";
		   //String s2="2006-04-25";
		   Date xxx1=new Date();
		   Date xxx2=new Date();
		  try {
			  xxx1=sf.parse(date1);
			  xxx2=sf.parse(date2);
			  day = (int) ((xxx2.getTime() - xxx1.getTime()) / 3600 / 24 / 1000);	
		  } catch (ParseException e) {
			  
			  //e.printStackTrace();
		  }
		  
		  return day;
	}
	
	/**
	 * 获取两个时间相差的分钟数
	 * @param start	开始时间
	 * @param end	结束时间
	 * @return		分钟数
	 */
	public static long hasMinute(Date start,Date end){
		try {
			System.out.println(start+"======="+end);
			long result=end.getTime()-start.getTime();
			System.out.println(end.getTime()+"========"+start.getTime());
			result = result / (1000 * 60);//分钟数
			return result;
		} catch (Exception e) {
			// TODO: handle exception
			return 0;
		}
	}
	
	/**
	 * 获取某年某月的最后一天
	 * @param date 日期 形式yyyy-MM-dd
	 * @author guojt
	 * @return 
	 */
	public static String getLastDayOfMonth(String date) {
		String[] ss = date.split("-");
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, Integer.valueOf(ss[0]));
		cal.set(Calendar.MONTH, Integer.valueOf(ss[1])-1);
		int maxDay = cal.getActualMaximum(Calendar.DATE);
		return ss[0] + "-" + ss[1] + "-" + maxDay;
	}
	
	/**
	 * 根据年份、周返回指定月份的日期段
	 * @param year 年
	 * @param week 周
	 * @param month 月
	 * @return
	 */
	public static String getDateByWeek(int year,int week,int month){
		String ret = "";
		Calendar c = Calendar.getInstance();
		c.set(year, 0, 1);
		int day_week = c.get(Calendar.DAY_OF_WEEK);
		//c.add(Calendar.DATE, -(day_week-1));
		c.add(Calendar.DATE, 7*week-(day_week-1));
		
		if((month - c.get(Calendar.MONTH)) != 1){
			ret += "1-";
			c.add(Calendar.DATE, 6);
			ret += c.get(Calendar.DAY_OF_MONTH);
		}else{
			int sun_week = c.get(Calendar.DAY_OF_MONTH);
			ret += sun_week + "-";
			c.add(Calendar.DATE, 6);
			int sat_week = c.get(Calendar.DAY_OF_MONTH);
			if(sat_week > sun_week){
				ret += sat_week;
			}else{
				ret += (6 - sat_week + sun_week);
			}
		}
		
		return ret;
	}
	
	/**
	 * 月份相减
	 * @author guojt
	 * @param date1 开始日期 格式yyyy-MM
	 * @param date2 结束日期 格式yyyy-MM
	 * @return 两个日期相差的月数
	 */
	 public static int getMonthInterval(String date1,String date2) {
		 try{
			 SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM");
	         Calendar cal1=Calendar.getInstance();
	             cal1.setTime(fmt.parse(date1));
	         Calendar cal2=Calendar.getInstance();
	             cal2.setTime(fmt.parse(date2));
	         //年份之差 + 月份之差
	         return (cal2.get(1)-cal1.get(1))*12+(cal2.get(2)-cal1.get(2));
		 }catch (Exception e) {
			e.printStackTrace();
		 }
		 return 0;
    }
	 
	 /**
	  * 月份相加
	  * @author guojt
	  * @param date 起始日期 格式:yyyy-MM
	  * @param n 月数
	  * @return 起始日期加上n个月后的日期
	  */
	public static String getAddCountMonth(String date,int n){
		try{
			SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM");
			Calendar c = Calendar.getInstance();
	        c.setTime(fmt.parse(date));
	        c.add(Calendar.MONTH, n);
	        return fmt.format(c.getTime());
        }catch (Exception e) {
			e.printStackTrace();
		}
        return null;
	}
	
	/**
	 * 得到当前日期是周几,返回的是数字 0是周日--6是周六
	 * @param date
	 * @return
	 */
	public static int getThisDateOfWeek(String date){
		try {
			SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
			Calendar cd = Calendar.getInstance();
			cd.setTime(fmt.parse(date));
			// 获得今天是一周的第几天,星期日是第一天,星期一是第二天......
			int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 因为按中国礼拜一作为第一天所以这里减1
			return dayOfWeek;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return -1;
	}
	
	/**
	 * 获取某年某月的第一天
	 * @param date 日期 形式yyyy-MM-dd
	 * @return
	 */
	public static String getFirstDayOfMonth(String date){
		String[] ss = date.split("-");
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, Integer.valueOf(ss[0]));
		cal.set(Calendar.MONTH, Integer.valueOf(ss[1])-1);
		int minDay = cal.getActualMinimum(Calendar.DATE);
		if(minDay < 10){
			return ss[0] + "-" + ss[1] + "-0" + minDay;
		}else{
			return ss[0] + "-" + ss[1] + "-" + minDay;
		}
	}
	
	   /** 
     * 获取当年的第一天 
     * @param year 
     * @return 
     */  
    public static Date getCurrYearFirst(){  
        Calendar currCal=Calendar.getInstance();    
        int currentYear = currCal.get(Calendar.YEAR);  
        return getYearFirst(currentYear);  
    } 
    
    
    /** 
     * 获取某年第一天日期 
     * @param year 年份 
     * @return Date 
     */  
    public static Date getYearFirst(int year){  
        Calendar calendar = Calendar.getInstance();  
        calendar.clear();  
        calendar.set(Calendar.YEAR, year);  
        Date currYearFirst = calendar.getTime();  
        return currYearFirst;  
    }  
    /** 
     * 获取某年最后一天日期 
     * @param year 年份 
     * @return Date 
     */  
    public static Date getCurrYearLast(int year){  
        Calendar calendar = Calendar.getInstance();  
        calendar.clear();  
        calendar.set(Calendar.YEAR, year);  
        calendar.roll(Calendar.DAY_OF_YEAR, -1);  
        Date currYearLast = calendar.getTime();  
          
        return currYearLast;  
    }  
    /**
	 * 判断这个日期是否这个日期所在年的第一天
	 * @param date
	 * @return
	 */
	public static boolean judgeIsFirstDayOfYear(String date){
		Date firstDay =getYearFirst(Integer.parseInt(format(parse(date), "yyyy")));// getYearFirst();
		if(format(parse(date),"yyyy-MM-dd").equals(format(firstDay,"yyyy-MM-dd"))){
			return true;
		}else{
			return false;
		}
	}
	 /**
		 * 判断这个日期是否这个日期所在年的最后一天
		 * @param date
		 * @return
		 */
		public static boolean judgeIsLastDayOfYear(String date){
			Date lastDay =getCurrYearLast(Integer.parseInt(format(parse(date), "yyyy")));// getYearFirst();
			if(format(parse(date),"yyyy-MM-dd").equals(format(lastDay,"yyyy-MM-dd"))){
				return true;
			}else{
				return false;
			}
		}
	public static void main(String[] args) {
		System.out.println(getFirstDayOfMonth(format(new Date())));
		judgeIsLastDayOfYear("2013-12-30");
	}
	
	/**
	 * 判断这个日期是否这个日期所在月的第一天
	 * @param date
	 * @return
	 */
	public static boolean judgeIsFirstDayOfMonth(String date){
		String firstDay = getFirstDayOfMonth(date);
		if(date.equals(firstDay)){
			return true;
		}else{
			return false;
		}
	}
	
	/**
	 * 判断这个日期是否这个日期所在月的最后一天
	 * @param date
	 * @return
	 */
	public static boolean judgeIsLastDayOfMonth(String date){
		String lastDay = getLastDayOfMonth(date);
		if(date.equals(lastDay)){
			return true;
		}else{
			return false;
		}
	}
	
	
	
/*	
	public static void main(String[] agrs){
//		System.out.println(getDateByWeek(2011,9,3));
//		System.out.println(DateUtils.getMonthInterval("2010-05-01","2011-01-09"));
//		System.out.println(DateUtils.getAddCountMonth("2010-05",3));
//		System.out.println(DateUtils.format(new Date(), "yyyyMM"));
//		System.out.println(hasMinute((new Date(2010-1900,11-1,15,10,16,0)),(new Date())));
		String d="15-12月-11 06.10.36.000000 下午";
		Date date=parse(d, "dd-MM月-yy hh.mm.ss.SS a");
		System.out.println(date);
		System.out.println(format(date,"yyyy-MM-dd HH:mm:ss"));
		System.out.println(format(new Date(),"dd-MM月-yy hh.mm.ss.SS a"));
	}*/
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值