DateUtil-时间日期操作类

package com.zxt.basic.util;


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



/**
 * 时间日期操作类		<br/>
 * @author ZHENG YI		<br/>
 */
public class DateUtil {

	/** 日期格式 */
	public static final String FORMAT_DATE = "yyyy-MM-dd";
	
	/** 日期时间格式 */
	public static final String FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss";
	
	/** 时间格式 */
	public static final String FORMAT_TIME = "HH:mm:ss";
	
	/** 整点时间格式 */
	public static final String FORMAT_DATETIMEZD = "yyyy-MM-dd HH:00:00";
	
	/** 日期格式(年, 月) */
	public static final String FORMAT_YEARMONTH = "yyyy-MM";
	
	/** 全时间格式 */
	public static final String FORMAT_FULLTIME = "yyyyMMddHHmmssSSS";
	
	/**
     * 根据规定格式的字符串得到Calendar
     * @param dateString    日期串
     * @return  对应Calendar
     */
	public static Calendar getCalendar (String dateString) {
		Calendar calendar = Calendar.getInstance();
		String[] items = dateString.split("-");
        calendar.set(Integer.parseInt(items[0]), Integer.parseInt(items[1]) - 1, Integer.parseInt(items[2]));
		return calendar;
	}
	
	/**
	 * 根据指定的日期格式将时间日期字符串转化为Date对象
	 * @param dateString 时间或日期字符串
	 * @param format 格式
	 * @return Date
	 */
	public static java.util.Date getDateFromString (String dateString, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat (format);
		try {
			return sdf.parse(dateString);
		} catch (ParseException e) {
			return null;
		}
	}
	
	/**
	 * 将Date对象根据指定的时间格式转换为String字符串
	 * @param date Date
	 * @param format 格式
	 * @return String
	 */
	public static String getStringFromDate (java.util.Date date, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
	}
	
	
	public static void main(String[] args) {
		
	}
	
	/**
	 * 转换时间字符串的格式
	 * @param dateString 时间字符串
	 * @param fromFormat 当前格式
	 * @param toFormat 转换格式
	 * @return String
	 */
	public static String changeFormat (String dateString, String fromFormat, String toFormat) {
		java.util.Date date = getDateFromString(dateString, fromFormat);
		if (date == null)
			return dateString;
		return getStringFromDate (date, toFormat);
	}
	
	/**
	 * 取得当前日期时间的字符串表示形式
	 * @return String
	 */
	public static String getDateTime () {
		Calendar calendar = Calendar.getInstance();
		return getStringFromDate(calendar.getTime(), FORMAT_DATETIME);
	}
	
	/**
	 * 取得当前日期的字符串表现形式
	 * @return String
	 */
	public static String getDate () {
		Calendar calendar = Calendar.getInstance();
		return getStringFromDate(calendar.getTime(), FORMAT_DATE);
	}
	
	/**
	 * 取得当前时间的字符串表示形式
	 * @return String
	 */
	public static String getTime () {
		Calendar calendar = Calendar.getInstance();
		return getStringFromDate(calendar.getTime(), FORMAT_TIME);
	}
	
	/**
	 * 取得当前年的年份
	 * @return int
	 */
	public static int getYear () {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.YEAR);
	}
	
	/**
	 * 取得当前月的月份
	 * @return int
	 */
	public static int getMonth () {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.MONTH);
	}
	
	/**
	 * 取得当前日的日期
	 * @return int
	 */
	public static int getDay () {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.DATE);
	}
	
	/**
	 * 取得指定的日期字符串的星期数
	 * @param date 日期字符串
	 * @return String
	 */
	public static String getChineseDayOfWeek (String date) {
		Calendar calendar = getCalendar(date);
		int w = calendar.get(Calendar.DAY_OF_WEEK);
		String week = "";
		switch (w) {
		case Calendar.SUNDAY:
			week = "星期日";
			break;
		case Calendar.MONDAY:
			week = "星期一";
			break;
		case Calendar.TUESDAY:
			week = "星期二";
			break;
		case Calendar.WEDNESDAY:
			week = "星期三";
			break;
		case Calendar.THURSDAY:
			week = "星期四";
			break;
		case Calendar.FRIDAY:
			week = "星期五";
			break;
		case Calendar.SATURDAY:
			week = "星期六";
			break;
		default:
			week = "星期一";
			break;
		}
		return week;
	}
	
	/**
	 * 取得当前日期是星期几
	 * @return String
	 */
	public static String getDayOfWeek () {
		return getChineseDayOfWeek (getDate ());
	}
	
	/**
	 * 取得中文的数据字符串
	 * @param number 数字
	 * @return String
	 */
	public static String getChineseNumber (int number) {
		String n = "";
		switch (number) {
		case 0:
			n = "O";
			break;
		case 1:
			n = "一";
			break;
		case 2:
			n = "二";
			break;
		case 3:
			n = "三";
			break;
		case 4:
			n = "四";
			break;
		case 5:
			n = "五";
			break;
		case 6:
			n = "六";
			break;
		case 7:
			n = "七";
			break;
		case 8:
			n = "八";
			break;
		case 9:
			n = "九";
			break;
		default: 
			n = "";
			break;
		}
		return n;
	}
	
	 /**
     * 根据日期值得到中文日期字符串
     * @param date  日期值
     * @return  中文日期字符串
     */
    public static String getChineseDate(String date) {
        if (date.length() < 10) {
            return "";
        } else {
            String year = date.substring(0, 4);
            String month = date.substring(5, 7); 
            String day = date.substring(8, 10); 
            String y1 = year.substring(0, 1); 
            String y2 = year.substring(1, 2);
            String y3 = year.substring(2, 3);
            String y4 = year.substring(3, 4);
            String m2 = month.substring(1, 2);
            String d1 = day.substring(0, 1);
            String d2 = day.substring(1, 2);
            String cy1 = getChineseNumber(Integer.parseInt(y1));
            String cy2 = getChineseNumber(Integer.parseInt(y2));
            String cy3 = getChineseNumber(Integer.parseInt(y3));
            String cy4 = getChineseNumber(Integer.parseInt(y4));
            String cm2 = getChineseNumber(Integer.parseInt(m2));
            String cd1 = getChineseNumber(Integer.parseInt(d1));
            String cd2 = getChineseNumber(Integer.parseInt(d2));
            String cYear = cy1 + cy2 + cy3 + cy4 + "年";
            String cMonth = "月";
            if (Integer.parseInt(month) > 9) {
                cMonth = "十" + cm2 + cMonth;
            } else {
                cMonth = cm2 + cMonth;
            }   
            String cDay = "日";
            if (Integer.parseInt(day) > 9) {
                cDay = cd1 + "十" + cd2 + cDay;
            } else {
                cDay = cd2 + cDay;
            }
            String chineseday = cYear + cMonth + cDay;
            return chineseday;
        }
    }
	
    /**
     * 根据日期值得到中文日期字符串
     *  返回2005年09月23日格式的日期
     * @param date 给定日期
     * @return String
     */
    public static String getChineseTwoDate(String date) {
        if (date.length() < 10) {
            return "";
        } else {
            String year = date.substring(0, 4);
            String month = date.substring(5, 7); 
            String day = date.substring(8, 10);
            return year + "年" + month + "月" + day + "日";
        }
    }
    
    /**
     * 根据当天的日期值得到中文日期字符串
     *  返回2005年09月23日格式的日期
     * @return String
     */
    public static String getChineseTwoDate() {
        return getChineseTwoDate(getDate());
    }
    
    /**
     * 得到与指定日期相差指定天数的日期字符串
     * @param dateString 指定的日期
     * @param period 前后的天数,正值为后, 负值为前
     * @param periodType 周期类别 可以是天、月、年
     * @return 日期字符串
     */
    public static String getCertainDate (String date, int period, int periodType) {
    	Calendar calendar = getCalendar(date);
    	switch (periodType) {
			case Calendar.DATE:
				calendar.add(Calendar.DATE, period);
				break;
			case Calendar.MONTH:
				calendar.add(Calendar.MONTH, period);
				break;
			case Calendar.YEAR:
				calendar.add(Calendar.YEAR, period);
				break;
		default:
			break;
		}
    	return getStringFromDate(calendar.getTime(), FORMAT_DATE);
    }
    
    /**
     * 得到与指定日期相差指定天数的日期字符串
     * @param dateString 指定的日期
     * @param days 前后的天数,正值为后, 负值为前
     * @return 日期字符串
     */
    public static String  getCertainDate(String dateString, int days) {
        Calendar calendar = getCalendar(dateString);
        calendar.add(Calendar.DATE, days);
        return getStringFromDate(calendar.getTime(), FORMAT_DATE);
    }
    
    /**
     * 得到指定日期的星期一的日期
     * @param dateString 日期字符串
     * @return  本周星期一的日期
     */
    public static String getFirstDateOfWeek(String dateString) {
        Calendar calendar = getCalendar(dateString);
        int iCount;
        if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
            iCount = -6;
        } else {
            iCount = Calendar.MONDAY - calendar.get(Calendar.DAY_OF_WEEK);
        }
        return getCertainDate(dateString, iCount);
    }
    
    /**
     * 返回两个时间相差的小时数
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return 返回值
     */
    public static double getDiffHoure(String beginTime, String endTime) {
        double dif = 0;
        try {
            java.util.Date eDatetime = getDateFromString(endTime, FORMAT_DATE);
            java.util.Date bDatetime = getDateFromString(beginTime, FORMAT_DATE);
            dif = (eDatetime.getTime() - bDatetime.getTime()) / 1000 / 3600;
        } catch (Exception e) {
            dif = 0;
        }
        return dif;
    }
    
    /**
     * 得到当前日期的所在月的第一天的日期
     * @param date 当前日期
     * @return String 返回的日期
     */
    public static String getMonthFirstDay(String date) { 
        Calendar cal = getCalendar(date);
        String month = String.valueOf(cal.get(Calendar.MONTH) + 1);
        String year = String.valueOf(cal.get(Calendar.YEAR));
        if (Integer.parseInt(month) < 10) {
            month = "0" + month;
        }
        return year + "-" + month + "-01";
    }

    /**
     * 得到当前日期的所在月的最后一天的日期
     * @param date 当前日期
     * @return String 返回的日期
     */
    public static String getMonthLastDay(String date) {  
        Calendar cal = getCalendar(date);
        int month = cal.get(Calendar.MONTH) + 1;
        int year = cal.get(Calendar.YEAR);
        int nextMonth = month + 1;
        int nextYear = year;
        if (nextMonth == 13) {
            nextMonth = 1;
            nextYear = nextYear + 1;
        }
        String nextMonthFirstDay = nextYear + "-" + nextMonth + "-01";
        return getCertainDate(nextMonthFirstDay, -1);
    }
    
    /**
     * 取得两日期间的月份差数
     * @param startDate 起始日期
     * @param endDate   结束日期
     * @return          月份差数
     */
    public static int getMonthDiff(String startDate, String endDate) {
        String[] startArray = startDate.split("-");
        String[] endArray = endDate.split("-");
        int startYear = Integer.parseInt(startArray[0]);
        int startMonth = Integer.parseInt(startArray[1]);
        int endYear = Integer.parseInt(endArray[0]);
        int endMonth = Integer.parseInt(endArray[1]);
        return Math.abs((endYear - startYear) * 12 + endMonth - startMonth);
    }
    
    
    /**
     * 
     * @author liheng   
     * 获得特定日期之后的固定天数的某一天
     * @param date 传入的日期 
     * @param days 要增加的天数
     * @return  Date  获取的目标日期
     * @exception    
     * @since  1.0.0
     */
	public static Date addDays(Date date,int days){
		Date date1 = null;
		try{
			if(null==date ){
				return date1;
			}
			Calendar calendar=Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.DATE, days);
			date1 = calendar.getTime();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			return date1;
		}
	}
	/**
	 * 
	 * @author liheng   
	 * 获得日期相减后的天数
	 * @param minuendDate 被减数日期
	 * @param subDate   减数日期
	 * @return  long    相差的天数
	 * @exception    
	 * @since  1.0.0
	 */
	public static int subDate(Date minuendDate,Date subDate){
		if(minuendDate!=null && subDate!=null ){
			long timeMillions=(minuendDate.getTime()-subDate.getTime())%(24*60*60*1000);
			int days= new Long((minuendDate.getTime()-subDate.getTime())/(24*60*60*1000)).intValue();
			if(timeMillions==0){
				return days;
			}else{
				return days+1;
			}
		}else{
			return 0;
		}
		
	}
    
}

 

posted @ 2013-11-09 16:53  霍哥  阅读(732)  评论(0编辑  收藏  举报