日期相关操作与转换

工作中用到的与日期相关的工具类

/**
 * @author chen
 * 日期相关的转换处理
 * 2017.5.4
 */
public class DateUtils {
	private static final String DATA_FORMAT = "yyyyMMdd";
	private static final String DATA_TIME_FORMAT = "yyyyMMddHHmmss";
	
	/**
	 * 根据指定的格式进行字串转日期类型分析
	 * @param strDate
	 * @param format 字串时间格式定义
	 * @return
	 */
	public static Date strToDateByFormat(String strDate, String format) {
		   SimpleDateFormat formatter = new SimpleDateFormat(format);
		   ParsePosition pos = new ParsePosition(0);
		   Date strtodate = formatter.parse(strDate, pos);
		   return strtodate;
	}
	
	/**
	 * 将yyyyMMdd格式的字串转换为日期
	 * @param strDate
	 * @return
	 */
	public static Date strToDate(String strDate) {
		   return strToDateByFormat(strDate, DATA_FORMAT);
	}
	
	/**
	 * 将yyyy-MM-dd HH:mm:ss格式的日期转为yyyyMMddHHmmss格式
	 * @param strDate
	 * @return
	 */
	public static String strDateTimeFormat(String strDate) {	
		   Date date = strToDateByFormat(strDate,"yyyy-MM-dd HH:mm:ss");
		   return dateTimeToStr(date);
	}
	
	/**
	 * 将yyyy-MM-dd格式的日期转为yyyyMMdd格式
	 * @param strDate
	 * @return
	 */
	public static String strDateFormat(String strDate) {
		   String s = strDate.replace("-", "");
		   return s;
	}
	
	/**
	 * 将yyyyMMddHHmmss格式的字串转换为日期
	 * @param strDate
	 * @return
	 */
	public static Date strToDateTime(String strDate) {
		return strToDateByFormat(strDate, DATA_TIME_FORMAT);
	}
	
	/**
	 * 按照指定的格式转换日期类型
	 * @param date
	 * @param format 转换格式,比如:"yyyy-MM-dd HH:mm:ss"
	 * @return
	 */
	public static String dateToStrByFormat(Date date, String format) {
	   SimpleDateFormat formatter = new SimpleDateFormat(format);
	   String dateString = formatter.format(date);
	   return dateString;
	}
	
	/**
	 * 按照"yyyyMMdd"格式转换日期类型为字符串
	 * @param date
	 * @return 比如:
	 */
	public static String dateToStr(Date date) {
	   return dateToStrByFormat(date, "yyyyMMdd");
	}
	
	/**
	 * 按照"yyyyMMddHHmmss"格式转换日期类型为字符串
	 * @param date
	 * @return 
	 */
	public static String dateTimeToStr(Date date) {
	   return dateToStrByFormat(date, "yyyyMMddHHmmss");
	}
	
	/**
	 * 将yyyyMMddHHmmss格式的日期转为"yyyy-MM-dd HH:mm:ss"格式
	 * @param date
	 * @return 
	 */
	public static String dateStrByFormat(String strDate) {
		Date date = strToDateByFormat(strDate,"yyyyMMddHHmmss");
	   return dateToStrByFormat(date, "yyyy-MM-dd HH:mm:ss");
	}
	
	/**
	 * 根据指定的时间类型进行时间增减
	 * @param dateType:1:年, 2:月, 3、4:周, 5、6、7:天 ,10、11:小时,12:分钟 ,13:秒 ,14:毫秒
	 * @param date
	 * @param count
	 * @return
	 */
	private static Date calDate( int dateType, Date date, int count){
		GregorianCalendar gc=new GregorianCalendar(); 
		gc.setTime(date);
		gc.add(dateType, count);
		return gc.getTime();
	}
	
	/**
	 * 根据指定的时间增加年数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addYear(Date date, int count){
		return calDate(GregorianCalendar.YEAR, date, count);
	}
	/**
	 * 根据指定的时间增加年数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addYear(String strDate, int count){
		Date date = strToDate(strDate);
		return calDate(GregorianCalendar.YEAR, date, count);
	}	
	/**
	 * 根据指定的时间增加月数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addMonth(Date date, int count){
		return calDate(GregorianCalendar.MONTH, date, count);
	}
	/**
	 * 根据指定的时间增加月数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addMonth(String strDate, int count){
		Date date = strToDate(strDate);
		return calDate(GregorianCalendar.MONTH, date, count);
	}	
	/**
	 * 根据指定的时间增加星期数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addWeek(Date date, int count){
		return calDate(GregorianCalendar.WEEK_OF_YEAR, date, count);
	}
	
	/**
	 * 根据指定的时间增加星期数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addWeek(String strDate, int count){
		Date date = strToDate(strDate);
		return calDate(GregorianCalendar.WEEK_OF_YEAR, date, count);
	}
	/**
	 * 根据指定的时间增加天数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addDay(Date date, int count){
		return calDate(GregorianCalendar.DATE, date, count);
	}
	
	/**
	 * 根据指定的时间增加分钟
	 * @param time 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addMinute(Date time, int count){
		return calDate(GregorianCalendar.MINUTE, time, count);
	}
	/**
	 * 根据指定的时间增加分钟
	 * @param strTime 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addMinute(String strTime, int count){
		Date date = strToDateTime(strTime);
		return calDate(GregorianCalendar.MINUTE, date, count);
	}
	/**
	 * 根据指定的时间增加天数
	 * @param date 指定时间
	 * @param count 增加量
	 * @return
	 */
	public static Date addDay(String strDate, int count){
		Date date = strToDate(strDate);
		return calDate(GregorianCalendar.DATE, date, count);
	}
	/**
	 * 根据指定的日期计算该日期对应周的第几天:星期一为1,星期日为7
	 * @param date
	 * @return
	 */
	public static int getDayOfWeek(Date date){
	    Calendar calendar = Calendar.getInstance();    
	    if(date != null){        
	         calendar.setTime(date);      
	    }        
	    int w = calendar.get(Calendar.DAY_OF_WEEK)-1 ;//星期天是1, 星期六是7
	    if(w <=0 ){//中国习惯 星期一为第一天,所以要做转换
	    	w =7;
	    }
	    
	    return w;
	}
	
	/**
	 * 根据指定的日期计算该日期对应周的第一天的时间(星期一)
	 * @param date
	 * @return
	 */
	public static Date getFirstDayOfWeek(Date date){
	    int w = getDayOfWeek(date);
	    if(w > 1){//需要计算星期一是哪一天
	    	return addDay(date, 1-w);
	    }
	    return date;
	}
	

	/**
	 * 根据指定的日期计算该日期对应周的第七天的时间(星期日)
	 * @param date
	 * @return
	 */
	public static Date getLastDayOfWeek(Date date){
	    Date d = getFirstDayOfWeek(date);
	    return addDay(d, 6);
	}
	
	/**
	 * 根据指定的日期计算该日期对应月的第一天的时间(1号)
	 * @param date
	 * @return
	 */
	public static Date getFirstDayOfMonth(Date date){
	    Calendar calendar = Calendar.getInstance();    
	    if(date != null){        
	         calendar.setTime(date);      
	    }        
	    int w = calendar.get(Calendar.DAY_OF_MONTH) ;//
	    
	    if(w > 1){//
	    	return addDay(date, 1-w);
	    }
	    return date;
	}
	
	/**
	 * 根据指定的日期计算该日期对应月的最后天的时间
	 * @param date
	 * @return
	 */
	public static Date getLastDayOfMonth(Date date){
	    Date  d = getFirstDayOfMonth(date);
	    d = addMonth(d, 1);
	    return addDay(d, -1);
	}
	
	/**
	 * 根据指定的日期计算该日期对应年的第一天的时间(一月1日)
	 * @param date
	 * @return
	 */
	public static Date getFirstDayOfYearh(Date date){
	    Calendar calendar = Calendar.getInstance();    
	    if(date != null){        
	         calendar.setTime(date);      
	    }        
	    int w = calendar.get(Calendar.DAY_OF_YEAR) ;//
	    
	    if(w > 1){//
	    	return addDay(date, 1-w);
	    }
	    return date;
	}
	/**
	 * 根据指定的日期计算该日期对应年的最后一天的时间(一月1日)
	 * @param date
	 * @return
	 */
	public static Date getLastDayOfYearh(Date date){
	    Date d = getFirstDayOfYearh(date);
	    d = addYear(d, 1);
	    return addDay(d, -1);
	}
	
	
	/**
	 * 日期比较 yyyyMMdd类型的时间或者yyyyMMddHHmmss
	 * @param date1 
	 * @param date2
	 * @return date1 早于 date2 返回 负数,相等返回 0, 晚于 正数
	 */
	public static int compareStrDate(String date1, String date2) {
        
        int d1 = Integer.parseInt(date1);
        int d2 = Integer.parseInt(date2);
                
        return (d1-d2);
    }
	
	public static void main(String[] args){
		String s = DateUtils.strDateFormat("2017-05-07");
//		String[] invalidDays = "1".split(",");
		
		System.out.println(s);
	}
	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值