Java中Date日期时间的工具类

package me.xueyao.date;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;


/**
 * 日期工具
 * @author tiant5
 *
 */
public class DateUtils {
	
	
	public static final String C_DATE_DIVISION = "-";
	public static final String C_TIME_PATTON_DEFAULT = "yyyy-MM-dd HH:mm:ss";
	public static final String C_TIME_PATTON_DEFAULT_WITHOUT_SS = "yyyy-MM-dd HH:mm";
	public static final String C_TIME_PATTON_DEFAULTS = "yyyy{MM-dd HH:mm}ss";
	public static final String C_TIME_PATTON_DEFAULTY = "MM-dd HH:mm";
	public static final String C_DATE_PATTON_DEFAULT = "yyyy-MM-dd";
	public static final String C_DATE_PATTON_DEFAULT_S = "yyyy/MM/dd";
	public static final String C_DATE_PATTON_yyyyMM = "yyyy-MM";
	public static final String C_DATA_PATTON_YYYYMMDD = "yyyyMMdd";
	public static final String C_TIME_PATTON_HHMMSS = "HHmmss";
	public static final String C_TIME_PATTON_hhmmss = "HH:mm:ss";
	public static final String C_TIME_PATTON_hhmm = "HH:mm";
	public static final String C_TIME_PATTON_yyyyMMddHHmmss = "yyyyMMddHHmmss";
	public static final String C_TIME_PATTON_yyyy = "yyyy";
	public static final String C_DATA_PATTON_YYMMDD = "yyMMdd";

	public static final int C_ONE_SECOND = 1000;
	public static final int C_ONE_MINUTE = 60 * C_ONE_SECOND;
	public static final int C_ONE_HOUR = 60 * C_ONE_MINUTE;
	public static final long C_ONE_DAY = 24 * C_ONE_HOUR;

	/**
	 * 计算天数差
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static int diffDate(Date   date1,   Date   date2)
	{
		return (int)((date1.getTime()-date2.getTime())/(24*60*60*1000));
	}
	/**
	 * 获取当前日期
	 * 
	 * @return DATE
	 */
	public static Date getCurrentDate() {
		Calendar cal = Calendar.getInstance();
		Date currDate = cal.getTime();
		return currDate;
	}

	/**
	 * 获取当前日期字符串
	 * 
	 * @return String
	 */
	public static String getCurrentDateStr() {
		Calendar cal = Calendar.getInstance();
		Date currDate = cal.getTime();
		return format(currDate);
	}
	
	/**
	 * 获取当前日期字符串
	 * 
	 * @return String
	 */
	public static String getCurrentTimeStr() {
		Calendar cal = Calendar.getInstance();
		return formatTime(cal.getTime());
	}

	/**
	 * 按指定格式获取当前时间字符串
	 * 
	 * @param strFormat
	 * @return String
	 */
	public static String getCurrentDateStr(String strFormat) {
		Calendar cal = Calendar.getInstance();
		Date currDate = cal.getTime();

		return format(currDate, strFormat);
	}
	
	/**
	 * 获取当前时间 yyyyMMddHHmmss
	 * @return String
	 */ 
	public static String getCurrTime() {
		Date now = new Date();
		SimpleDateFormat outFormat = new SimpleDateFormat(C_TIME_PATTON_yyyyMMddHHmmss);
		String s = outFormat.format(now);
		return s;
	}

	/**
	 * 将字符类型转为日期类型(yyyy-MM-dd)
	 * 
	 * @param dateValue
	 * @return Date
	 */
	public static Date parseDate(String dateValue) {
		return parseDate(C_DATE_PATTON_DEFAULT, dateValue);
	}
	
	/**
	 * 将字符串转为时间类型"HH:mm:ss"
	 */
	public static Date parseHour(String dateValue){
		return parseDate(C_TIME_PATTON_hhmmss, dateValue);
	}

	/**
	 * 
	 * @describe 获得当前时间
	 */
	public static String getCurrentDateTime(){
		Calendar cal = Calendar.getInstance();
		return format(cal.getTime(), C_TIME_PATTON_hhmmss);
	}
	
	/**
	 * 将字符类型转为日期类型(yyyy-MM-dd HH:mm:ss)
	 * 
	 * @param dateValue
	 * @return Date
	 */
	public static Date parseDateTime(String dateValue) {
		return parseDate(C_TIME_PATTON_DEFAULT, dateValue);
	}

	/**
	 * 按指定类型将字符类型转为日期类型
	 * 
	 * @param strFormat
	 * @param dateValue
	 * @return Date
	 */
	public static Date parseDate(String strFormat, String dateValue) {
		if (dateValue == null)
			return null;

		if (strFormat == null)
			strFormat = C_TIME_PATTON_DEFAULT;

		SimpleDateFormat dateFormat = new SimpleDateFormat(strFormat);
		Date newDate = null;

		try {
			newDate = dateFormat.parse(dateValue);
		} catch (ParseException pe) {
			newDate = null;
		}

		return newDate;
	}

	/**
	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串
	 * 
	 * @param aTs_Datetime
	 *            需要转换的日期。
	 * @return 转换后符合给定格式的日期字符串
	 */
	public static String format(Date aTs_Datetime) {
		return format(aTs_Datetime, C_DATE_PATTON_DEFAULT);
	}
	/**
	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串
	 * 
	 * @param aTs_Datetime    yyyy/MM/dd
	 *            需要转换的日期。
	 * @return 转换后符合给定格式的日期字符串
	 */
	public static String formatString(Date aTs_Datetime) {
		return format(aTs_Datetime, C_DATE_PATTON_DEFAULT_S);
	}
	
	/**
	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串
	 * 
	 * @param
	 *            。
	 * @return 转换后符合给定格式的日期字符串
	 */
	public static String formatToString(Date Datetime) {
		String str = "";
		long current=System.currentTimeMillis();//当前时间毫秒数
		long zero=current/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();//今天零点零分零秒的毫秒数  
        Date today= new Timestamp(zero);
        Date yesterday = addDays(today,-1);  
        if(Datetime.after(today) || Datetime.equals(today)){
        	str = format(Datetime, C_TIME_PATTON_hhmm);
        }else if(Datetime.after(yesterday)|| Datetime.equals(yesterday)){
        	str = "昨天  "+format(Datetime, C_TIME_PATTON_hhmm);
        }else{
        	str = format(Datetime, C_TIME_PATTON_DEFAULTY);
        }
		return str;
	}

	/**
	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串
	 * 
	 * @param aTs_Datetime
	 *            需要转换的日期。
	 * @return 转换后符合给定格式的日期字符串
	 */
	public static String formatTime(Date aTs_Datetime) {
		return format(aTs_Datetime, C_TIME_PATTON_DEFAULTS);
	}
	
	/**
	 * 将Timestamp类型的日期转换为系统参数定义的格式的字符串
	 * 
	 * @param aTs_Datetime
	 *            需要转换的日期。
	 * @return 转换后符合给定格式的日期字符串
	 */
	public static String formatTimes(Date aTs_Datetime) {
		return format(aTs_Datetime, C_TIME_PATTON_DEFAULT);
	}

	/**
	 * 将Date类型的日期转换为指定格式的字符串
	 * 
	 * @param aTs_Datetime
	 * @param as_Pattern
	 * @return
	 */
	public static String format(Date aTs_Datetime, String as_Pattern) {
		if (aTs_Datetime == null || as_Pattern == null)
			return null;

		SimpleDateFormat dateFromat = new SimpleDateFormat();
		dateFromat.applyPattern(as_Pattern);

		return dateFromat.format(aTs_Datetime);
	}

	/**
	 * 将Date类型的时间转换为字符串
	 * 
	 * @param
	 * @param
	 * @return
	 */
	public static String getFormatTime(Date dateTime) {
		return format(dateTime, C_TIME_PATTON_HHMMSS);
	}
	
	
	/**
	 * 将Date类型的时间转换为字符串,保留时分
	 * 
	 * @param
	 * @param
	 * @return
	 */
	public static String getFormatTimeHM(Date dateTime) {
		return format(dateTime, "HH:mm");
	}
	
	/**
	 * 将Date类型的时间转换为字符串
	 * 
	 * @param
	 * @param
	 * @return
	 */
	public static String getFormatTimeAsYMD(Date dateTime) {
		return format(dateTime, C_DATA_PATTON_YYYYMMDD);
	}

	/**
	 * 将Timestamp类型的时间转换为指定格式字符串
	 * 
	 * @param aTs_Datetime
	 * @param as_Pattern
	 * @return
	 */
	public static String format(Timestamp aTs_Datetime, String as_Pattern) {
		if (aTs_Datetime == null || as_Pattern == null)
			return null;

		SimpleDateFormat dateFromat = new SimpleDateFormat();
		dateFromat.applyPattern(as_Pattern);

		return dateFromat.format(aTs_Datetime);
	}
	
	public static Date addYears(Date date, int years){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.YEAR, years);
		return cal.getTime();
	}
	
	/**
	 * 取得指定日期N天后的日期
	 * 
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date addDays(Date date, int days) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);

		cal.add(Calendar.DAY_OF_MONTH, days);

		return cal.getTime();
	}

	/**
	 * 取得指定日期N月后的日期
	 * 
	 * @param date
	 * @param
	 * @return
	 */
	public static Date addMonth(Date date, int month){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH,month);
		return cal.getTime();
	}
	
	
	/**
	 * 取得指定日期N小时的天数
	 * 
	 * @param date
	 * @param
	 * @return
	 */
	public static Date addHour(Date date, int time) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.HOUR_OF_DAY, time);
		return cal.getTime();
	}

	/**
	 * 计算两个日期之间相差的天数(date2 - date1)
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static int daysBetween(Date date1, Date date2) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date1);
		long time1 = cal.getTimeInMillis();
		cal.setTime(date2);
		long time2 = cal.getTimeInMillis();
		long between_days = (time2 - time1) / (1000 * 3600 * 24);

		return Integer.parseInt(String.valueOf(between_days));
	}
	
	
	/**
	 * 计算两个日期之间相差的毫秒数(date2 - date1)
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static long millSecondBetween(Date date1, Date date2) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date1);
		long time1 = cal.getTimeInMillis();
		cal.setTime(date2);
		long time2 = cal.getTimeInMillis();
		long between_days = time2 - time1;
		return between_days;
	}
	
	/**
	 * 判断时间是否在给定时间之间
	 * @param d 中间时间
	 * @param
	 * @param
	 * @return
	 */
	public static int dayTimesBetween(Date d,Date begin_date, Date end_date) {
		int i = 0;
		Calendar cal = Calendar.getInstance();
		cal.setTime(d);
		long t = cal.getTimeInMillis();
		cal.setTime(begin_date);
		long begin_date_l = cal.getTimeInMillis();
		cal.setTime(end_date);
		long end_date_l = cal.getTimeInMillis();
		if (t-begin_date_l>=0&&t-end_date_l<=0) {
			i = 1;
		}
		return i;
	}
	
	/**
	 * 获取时间的月份
	 * @param nowDate
	 * @return
	 */
	 public static int getMonth(Date  nowDate)
	  {
		  int re=0;
		  Calendar nowCalendar=Calendar.getInstance();
			 nowCalendar.setTime(nowDate);
			
			 re=nowCalendar.get(2)+1; 
		  return re;
	  }
	  
	 /**
	  * 获取时间的年份
	  * @param nowDate
	  * @return
	  */
	  public static int getYear(Date  nowDate)
	  {
		  int re=0;
		  Calendar nowCalendar=Calendar.getInstance();
			 nowCalendar.setTime(nowDate);
			 re=nowCalendar.get(1); 
		  return re;
	  }
	  
	  /**
	   * 获取时间的在什么时间段
	   * @param nowDate
	   * @return
	   */
	  public static String getHourStr(Date  nowDate)
	  {
		  int re=0;
		  int re2=0;
		  String date= "";
		  Calendar nowCalendar=Calendar.getInstance();
			 nowCalendar.setTime(nowDate);
			 re=nowCalendar.get(11); 
			 re2 = re+1;
			 if(re<10){
				 date = "0"+re;
			 }else{
				 date = re+"";
			 }
			 if(re2<10){
				 date = date + "-0"+re2;
			 }else{
				 date = date +"-"+re2;
			 }
			 
		  return date;
	  }
	  
	  /**
	   * 获取时间的小时
	   * @param nowDate
	   * @return
	   */
	  public static int getHour(Date  nowDate)
	  {
		  int re=0;
		  Calendar nowCalendar=Calendar.getInstance();
			 nowCalendar.setTime(nowDate);
			 re=nowCalendar.get(11); 
		  return re;
	  }
	  
	  /**
	   * 获取时间的星期
	   * @param nowDate
	   * @return
	   */
	  public static int getDay0fWeek(Date  nowDate)
	  {
		  int re=0;
		  Calendar nowCalendar=Calendar.getInstance();
			 nowCalendar.setTime(nowDate);
			 re=nowCalendar.get(7); 
		  return re;
	  }
	  
	  /**
	   *  获取时间,是一个月的第几天
	   * @param nowDate
	   * @return
	   */
	  public static int getDay0fMonth(Date  nowDate)
	  {
		  int re=0;
		  Calendar nowCalendar=Calendar.getInstance();
			 nowCalendar.setTime(nowDate);
			 re=nowCalendar.get(5); 
		  return re;
	  }
	  
	  /**
	   *  将string 装为date
	   * @param textDate
	   * @return
	   */
	  public static Date getDate(String textDate) {
		    SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		    Date date = null;
		    try {
		      date = sdfInput.parse(textDate);
		    } catch (ParseException ex) {
		    }
		    return date;
		  }
		/*
		 * 获取默认的开始时间,取服务器当前时间
		 */
	   	public static Date toDayStartTimeDefault(){
	   		SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");  
	   		
	   		Date currentTime2 =new Date();  
	   		String endTimeString = f.format(currentTime2)+" 00:00:00";
	   		  Date endTime=getDate(endTimeString);
	   		return endTime;
	   	}
	   	
	   	
	   	/*
		 * 获取默认的结束时间,取服务器当前时间
		 */
	   	public static Date toDayEndTimeDefault(){
	   		SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");  
	   		
	   		Date currentTime2 =new Date();  
	   		String endTimeString = f.format(currentTime2)+" 23:59:59";
	   		  Date endTime=getDate(endTimeString);
	   		return endTime;
	   	}
	   	
	   	/**
	   	 * 获取当天2点钟的时间
	   	 */
	   	public static Date toDayTime2Default(){
	   		SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");  
	   		
	   		Date currentTime2 =new Date();  
	   		String endTimeString = f.format(currentTime2)+" 02:00:00";
	   		  Date endTime=getDate(endTimeString);
	   		return endTime;
	   	}
	   	
	   	/**
	   	 * 获取格式为:MM-dd的时间字符串
	   	 */
	   	public static String getShortDate(Date dateTime){
	   		if(dateTime == null) return "";
	   		 String time = formatTime(dateTime);
	   		 return time.substring(5, 10);
	   	}
	   	
	   	/**
	   	 * 获取格式为:MM-dd HH:mm的时间字符串
	   	 */
	   	public static String getShortTime(Date dateTime){
	   		if(dateTime == null) return "";
	   		 String time = formatTime(dateTime);
	   		 return time.substring(5, 16);
	   	}
	   	/**
	   	 * 计算两个日期之间相差的天数,小时,分钟(date2 - date1)
	   	 */
	   	public static String timesBetween(Date date1, Date date2) {
	   		 String re = ""; 
	   		long timeBetweenLong = date1.getTime()- date2.getTime() ;
	   		   long dayTimeLong = timeBetweenLong/(24*60*60*1000);
	   		     if(dayTimeLong > 0)
	   		     {
	   		    	 re = re+ dayTimeLong +"天";
	   		     }
	   		  long hoursTimeLong = timeBetweenLong%(24*60*60*1000)/(60*60*1000);    
	   		 if(hoursTimeLong > 0)
   		     {
   		    	 re = re+  hoursTimeLong +"小时";
   		     }
	   		 
	   	  long mTimeLong = timeBetweenLong%(24*60*60*1000)%(60*60*1000)/(60*1000); 		   		 
		    	 re = re+  mTimeLong +"分钟"; 		   		 
	   		 return re ;
	   	}

	/**
	 * 将日期文字转化为具体的日期
	 * 
	 * @return
	 */
	public static Date string2Date(String dateString, String formatString) {
		SimpleDateFormat formate = new SimpleDateFormat(formatString);
		Date date;
		try {
			date = formate.parse(dateString);
			return date;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 返回为相对时间串
	 * @param date
	 * @return
	 */
	public static String trans4TimeStr(Date date)
	{
		if (date == null)
		{
			return "出错";
		}
		Date curDate = new Date();
		long mTime = date.getTime();
		long cTime = curDate.getTime();
		long result = cTime - mTime;
		double dayTime = (double)result / (double)(1000 * 60 * 60 * 24); 
		if ( dayTime < 0)
		{
			return "时间出错";
		}
		if ( dayTime < 1)
		{
			int hour = (int)(dayTime * 24);
			if (hour == 0)
			{
				int minitus = (int)(dayTime * 24 * 60);
				return minitus + "分钟前";
			}
			return hour + "小时前";
		}
		return (int)dayTime + "天前";
	}
	
	
	/**
	 * 
	 * 将日期转化为字符串
	 * @return
	 */
	public static String Date2String(Date date, String formatString) {
		SimpleDateFormat formate = new SimpleDateFormat(formatString);
		return formate.format(date);
	}
	
	
	/**
	 * 返回为1表示星期一
	 * 返回为7表示星期天
	 * 其它一次类推
	 * @param date
	 * @return
	 */
	public static int indexOfCurrentWeek(Date date)
	{
		Calendar cal = Calendar.getInstance(); 
        cal.setTime(date);           
        int w=cal.get(Calendar.DAY_OF_WEEK)-1; 
        if(w==0)
        {
        	w = 7;
        }
        return w;
	}
	
	/**
	 * 返回为1表示星期一
	 * 返回为7表示星期天
	 * 其它一次类推,返回月日,周几 -上下午
	 * @param date
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static String indexOfDateWeek(Date date)
	{
		String DateStr = "";
		String str = "";
		Calendar cal = Calendar.getInstance(); 
        cal.setTime(date);           
        int w=cal.get(Calendar.DAY_OF_WEEK)-1; 
        if(w==0)
        {
        	str = "周日";
        }
        if(w==1)
        {
        	str = "周一";
        }
        if(w==2)
        {
        	str = "周二";
        }
        if(w==3)
        {
        	str = "周三";
        }
        if(w==4)
        {
        	str = "周四";
        }
        if(w==5)
        {
        	str = "周五";
        }
        if(w==6)
        {
        	str = "周六";
        }
        if(getHour(date)<=12){
        DateStr = getMonth(date)+"月"+date.getDate()+"日 "+" "+str+"-上午";
        }else{
        	DateStr = getMonth(date)+"月"+date.getDate()+"日 "+" "+str+"-下午";
        }
        return DateStr;
	}
	
	/**
	 * 返回为1表示星期一
	 * 返回为7表示星期天
	 * 其它一次类推,返回年月日,-上下午+时分
	 * @param date
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static String DateWeek(Date date)
	{
		String DateStr = "";
		Calendar cal = Calendar.getInstance(); 
        cal.setTime(date);            
        
        if(getHour(date)<=12){
        DateStr = format(date)+" "+"-上午"+date.getHours()+":"+(date.getMinutes()<10?"0"+date.getMinutes():date.getMinutes())+"前";
        }else{
        	DateStr = format(date)+" "+"-下午"+date.getHours()+":"+(date.getMinutes()<10?"0"+date.getMinutes():date.getMinutes())+"前";
        }
        return DateStr;
	}
	
	public static String getTimeString(Date date, String style) {
		SimpleDateFormat myFmt2 = new SimpleDateFormat(style);
		return myFmt2.format(date);
	}
	
	
	/**
	 * 是否到期
	 * @param date
	 * @return
	 */
	public static boolean isTimeUp(Date date)
	{
		Calendar cal = Calendar.getInstance(); 
        return cal.after(date);
	}
	
	/*
	 * 获取今天N小时N分N秒的时间
	 */
	public static Date get_today_hour_minite(int hour,int minute,int second)
	{
		 Calendar c = Calendar.getInstance();
	     c.set(Calendar.HOUR_OF_DAY, hour);
	     c.set(Calendar.MINUTE, minute);
	     c.set(Calendar.SECOND, second);

			return c.getTime();
	}
	/**
	 * 比较两个日期的大小	
	 * @param
	 * @param
	 * @return
	 */
	public static int compare_time(String date1,String date2){
		java.text.DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
		Calendar c1= Calendar.getInstance();
		Calendar c2= Calendar.getInstance();
		try    
		{     
		c1.setTime(df.parse(date1));     
		c2.setTime(df.parse(date2));     
		}catch(ParseException e){
		System.err.println("格式不正确");     
		}     
		int result=c1.compareTo(c2);
		return result;
	}
	
	/**
	 * 将当前时间增加分钟数
	 */
	public static Date addMinutes(Date date,int minutes){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MINUTE, minutes);
		return cal.getTime();
	}
	
	/**
	 * 
	 * @Description:返回时间间隔内的日期
	 * @param begin_date
	 * @param end_date
	 * @return
	 */
	public static List<String> timeSepreate(String begin_date,String end_date){
		List<String> str = new ArrayList<String>();
		Date begin_d = DateUtils.parseDate(begin_date);
		Date end_d = DateUtils.parseDate(end_date);
		String begin_d_d = "";
		do{
			begin_d_d = DateUtils.format(begin_d);
			str.add(begin_d_d);
			begin_d = DateUtils.addDays(begin_d, 1);
		}while(begin_d.compareTo(end_d)<=0);
		return str;
	}
	
	/**
	 * 将当前时间增加秒钟数
	 */
	public static Date addSeconds(Date date,int seconds){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.SECOND, seconds);
		return cal.getTime();
	}
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monika、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值