Java 日期时间工具类

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DateUtil {
	private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");

	private final static SimpleDateFormat sdfDay = new SimpleDateFormat(
			"yyyy-MM-dd");
	
	private final static SimpleDateFormat sdfDays = new SimpleDateFormat(
	"yyyyMMdd");

	private final static SimpleDateFormat sdfTime = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");

	private final static SimpleDateFormat sdfHour = new SimpleDateFormat(
			"HH");
	
	private final static SimpleDateFormat sdfWeek = new SimpleDateFormat("EEEE");
	/**
	 * 获取YYYY格式
	 * 
	 * @return
	 */
	public static String getYear() {
		return sdfYear.format(new Date());
	}

	/**
	 * 获取YYYY-MM-DD格式
	 * 
	 * @return
	 */
	public static String getDay() {
		return sdfDay.format(new Date());
	}
	
	/**
	 * 获取YYYYMMDD格式
	 * 
	 * @return
	 */
	public static String getDays(){
		return sdfDays.format(new Date());
	}

	/**
	 * 获取YYYY-MM-DD HH:mm:ss格式
	 * 
	 * @return
	 */
	public static String getTime() {
		return sdfTime.format(new Date());
	}

	/**
	* @Title: compareDate
	* @Description: TODO(日期比较,如果s>=e 返回true 否则返回false)
	* @param s
	* @param e
	* @return boolean  
	* @throws
	* @author luguosui
	 */
	public static boolean compareDate(String s, String e) {
		if(fomatDate(s)==null||fomatDate(e)==null){
			return false;
		}
		return fomatDate(s).getTime() >=fomatDate(e).getTime();
	}
	
	
	/**
	 * 格式化日期
	 * 
	 * @return
	 */
	public static Date fomatDate(String date) {
		DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return fmt.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 校验日期是否合法
	 * 
	 * @return
	 */
	public static boolean isValidDate(String s) {
		DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		try {
			fmt.parse(s);
			return true;
		} catch (Exception e) {
			// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
			return false;
		}
	}
	/**
	 * 获取年差
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public static int getDiffYear(String startTime,String endTime) {
		DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		try {
			long aa=0;
			int years=(int) (((fmt.parse(endTime).getTime()-fmt.parse(startTime).getTime())/ (1000 * 60 * 60 * 24))/365);
			return years;
		} catch (Exception e) {
			// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
			return 0;
		}
	}
	/**
	 * 获取时差
	 * @param startTime
	 * @param endTime
	 * @param type 时间类型
	 * @return
	 */
	public static int getDiff(Long startTime,Long endTime,String type) {
		if("day".equals(type)) //天数差
			return  (int) ((startTime - endTime)/(1000 * 60 * 60 * 24));
		else if("hour".equals(type)) //小时差
			return  (int) ((startTime - endTime)/(1000 * 60 * 60));
		else if("minute".equals(type)) //分钟差
			return  (int) ((startTime - endTime)/(1000 * 60));
		else
			return 0;
	}
	  /**
     * <li>功能描述:时间相减得到天数
     * @param beginDateStr
     * @param endDateStr
     * @return
     * long 
     * @author Administrator
     */
    public static long getDaySub(String beginDateStr,String endDateStr){
        long day=0;
        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Date beginDate = null;
        java.util.Date endDate = null;
        
            try {
				beginDate = format.parse(beginDateStr);
				endDate= format.parse(endDateStr);
			} catch (ParseException e) {
				e.printStackTrace();
			}
            day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
            //System.out.println("相隔的天数="+day);
      
        return day;
    }
    
    /**
     * 得到n天之后的日期
     * @param days
     * @return
     */
    public static String getAfterDayDate(String days) {
    	int daysInt = Integer.parseInt(days);
    	
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        
        SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdfd.format(date);
        
        return dateStr;
    }
    
    /**
     * 得到n天之后是周几
     * @param days
     * @return
     */
    public static String getAfterDayWeek(String days) {
    	int daysInt = Integer.parseInt(days);
    	
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        
        SimpleDateFormat sdf = new SimpleDateFormat("E");
        String dateStr = sdf.format(date);
        
        return dateStr;
    }
    /**
     * 同一个月用mtrc_dt,不同月的用max(mtrc_yr_mo_nm)的最后一天
     * @param date1:mtrc_dt如:2017-12-05	,date2:max(mtrc_yr_mo_nm)如:201711
     * @return string date
     */
    public static String getMaxDate(String date1, String date2) throws ParseException {
//		date1 = "2017-12-05";
//		date2 = "201710";网络分析有周数据,会有20171205
    	SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMM");
		boolean isWeek = false;//判断是否周数据
		String date = date1;
		date = date.replaceAll("-", "");
		if( date2.length() < date.length() )
			date = date.substring(0, 6);
		else
			isWeek = true;
//		System.out.println(date);
		
		Calendar lastDate = Calendar.getInstance();
//		System.out.println(date2.equals(date));
		if(date2.substring(0,6).equals(date)) {
			return date1;
		}else {
			String format = "";
			if(isWeek) {
				Date d = sdf1.parse(date2);
				lastDate.setTime(d);
				format = sdf2.format(lastDate.getTime());
			}else {
				Date d = sdf1.parse(date2.substring(0,6)+"01");
				lastDate.setTime(d);
		        lastDate.set(Calendar.DATE, 1);
		        lastDate.add(Calendar.MONTH, 1);
		        lastDate.add(Calendar.DATE, -1);
		        format = sdf2.format(lastDate.getTime());
			}
			
	        return format;
		}
		
	}
    
    /**
     * 获取十二个月
     * @param date 日期,如:2017-12  isLatelay_12 是否最近十二个月
     * @return List
     */
    public static List getMonth_12(String date,boolean isLatelay_12) throws ParseException {
    	SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    	SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMM");
    	Date date_ =sdf1.parse(date+"-01");
    	Calendar cal = Calendar.getInstance();
    	cal.setTime(date_);
    	List monthList = new ArrayList();

	    if(isLatelay_12) {
	    	cal.add(Calendar.YEAR, -1);// 上一年
	    	for(int i=1;i<=12;i++) {
	    		cal.add(Calendar.MONTH, 1); // 得到下一个月
	    		monthList.add(sdf2.format(cal.getTime()));
	    	}
	    }else {
	    	String year = date.substring(0, 4);
	    	for(int i=1;i<=12;i++) {
	    		monthList.add(year + ( i<10 ? ("0"+i) : i ));
	    	}
	    }
        return monthList;  
	}
    
    /**
     * 日期,是所在年的第几周
     * @param date 日期,如:2017-12-05	
     * @return int weeks 返回第几周,(周日至周六为一周)
     */
    public static int getMonthWeeks(String date) throws ParseException {
//		date1 = "2017-12-05";
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	Date date_ =sdf.parse(date);
    	Calendar calendar = Calendar.getInstance();
	    calendar.setTime(date_);
	    return calendar.get(Calendar.WEEK_OF_YEAR);
	}
    
    /**
     * 日期所在月,共有多少天
     * @param date 日期,如:2017-12-05	
     * @return int days 返回天数
     */
    public static int getMonthDays(String date) throws ParseException {
//		date1 = "2017-12-05";
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	Date date_ =sdf.parse(date);
    	Calendar calendar = Calendar.getInstance();
	    calendar.setTime(date_);
	    return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
    
    /**
     * 加减年份
     * @param date 日期,如:2017-12-05	 index 加减多少年,如:1或-1
     * @return String date
     */
    public static String getYearDate(String date,int index) throws ParseException {
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	Date date_ =sdf.parse(date);
    	Calendar calendar = Calendar.getInstance();
	    calendar.setTime(date_);
	    calendar.add(Calendar.YEAR, index);
	    return sdf.format(calendar.getTime());
	}
    
    /**
     * 加减年份,短年
     * @param date 日期,如:201712	 index 加减多少年,如:1或-1
     * @return String date
     */
    public static String getYearDate2(String date,int index) throws ParseException {
    	String newDate = date + "01";
    	SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
    	SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMM");
    	Date date_ =sdf1.parse(newDate);
    	Calendar calendar = Calendar.getInstance();
	    calendar.setTime(date_);
	    calendar.add(Calendar.YEAR, index);
	    return sdf2.format(calendar.getTime());
	}
    
    /**
     * 加减月份
     * @param date 日期,如:2017-12-05	 index 加减多少月,如:1或-1
     * @return String date
     */
    public static String getMonthDate(String date,int index) throws ParseException {
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	Date date_ =sdf.parse(date);
    	Calendar calendar = Calendar.getInstance();
	    calendar.setTime(date_);
	    calendar.add(Calendar.MONTH, index);
	    return sdf.format(calendar.getTime());
	}
    
    /**
     * 获取周几
     * @param date 日期,如:2017-12-05
     * @return int week
     */
    public static int getWeek(String date) throws ParseException {
    	int w = 0;
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	String[] weekDays = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六","星期日"};
    	String week = sdfWeek.format(sdf.parse(date));
    	for(int i=0;i<weekDays.length;i++){
    		if(weekDays[i].equals(week)){
    			w = i + 1;
    			break;
    		}
    	}
	    return w;
	}
    
    /**
     * 获取小时
     * @param date 日期,如:2017-12-05 11:09:00
     * @return int hour
     */
    public static int getHour(String date) throws ParseException {
    	String hour = sdfHour.format(sdfTime.parse(date));
	    return Integer.parseInt(hour);
	}
    
    public static void main(String[] args) throws ParseException {
    	//System.out.println(getDays());
    	//System.out.println(getAfterDayWeek("3"));
//    	getMaxDate("","");
    	
    	/*System.out.println(getHour("2018-08-26 11:08:09"));
    	System.out.println(getWeek("2018-08-26 11:08:09"));
    	System.out.println(getMonthDays("2016-02-01"));
    	System.out.println(getMonthWeeks("2018-01-07"));*/
    	/*try{
    		double ts[] = {3.2,0/3,4/0,9};
        	for(int i=0;i<ts.length;i++){
        			System.out.println(i+"gggggggggggggggg:"+ts[i]);
        	}
    	}catch(Exception e){
    		e.printStackTrace();
    	}*/
    	
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值