Java的日期工具类

 

 

package com.tech.jin.util;

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

import org.apache.log4j.Logger;

public class DateUtil {
    
    private static Logger logger = Logger.getLogger(DateUtil.class);
    
    private static Date now = new Date();
    
    /**
     * 获取日期格式对象
     * @param format
     * @return
     */
    private static DateFormat getFormatInstance(String format){
        DateFormat sdf = new SimpleDateFormat(format);
        return sdf;
    }
    
    /**
     * date对象转字符串
     * @param date
     * @param format
     * @return
     */
    public static String dateToString(Date date,String format){
        if(date==null){
            return "";
        }
        
        DateFormat df = getFormatInstance(format);
        String dateStr = df.format(date);
        logger.info("dateToString:"+dateStr);
        return dateStr;
    }
    
    /**
     * 字符串转date对象
     * @param dateStr
     * @param format
     * @return
     */
    public static Date stringToDate(String dateStr,String format){
        if(dateStr==null||"".equals(dateStr.trim())){
            logger.info("要转换的date字符串为空...");
            return null;
        }
        logger.info("stringToDate:"+dateStr);
        DateFormat df = getFormatInstance(format);
        Date date = null;
        try {
            date = df.parse(dateStr);
        } catch (ParseException e) {
            logger.error("stringToDate转换错误:"+e);
        }
        
        return date;
    }
    
    /**
     * date字符串更换格式
     * @param dateStr
     * @param oldFormat
     * @param newFormat
     * @return
     */
    public static String stringToString(String dateStr,String oldFormat,String newFormat){
        Date date = stringToDate(dateStr, oldFormat);
        dateStr = dateToString(date, newFormat);
        
        return dateStr;
    }
    
    /**
     * 获取当前时间/日期
     * @return
     */
    public static Date getNow(){
        return now;
    }
    
    /**
     * 获取当前时间/日期字符串
     * @param format
     * @return
     */
    public static String getNowStr(String format){
        String nowStr = dateToString(now, format);
        logger.info("获取当前时间字符串:"+nowStr);
        return nowStr;
    }

    /**
     * 比较两个时间字符串
     * @param dateStr1
     * @param dateStr2
     * @param format
     * @return  -2:比较时间异常
     *             -1: (dateStr1 < dateStr2) 
     *             0: (dateStr1 = dateStr2) 
     *             1: (dateStr1 > dateStr2)
     * 
     */
    public static int compareDateStr(String dateStr1,String dateStr2,String format){
        
        logger.info("dateStr1:"+dateStr1+" dateStr2:"+dateStr2);
        
        Date date1 = stringToDate(dateStr1, format);
        Date date2 = stringToDate(dateStr2, format);
        
        int result = -2;//初始化状态
        
        result = compareDate(date1, date2);
        
        String resultStr = "对字符串进行("+format+")格式化后,";
        if(result==0){
            resultStr += dateStr1+" = "+dateStr2;
        }else if(result==1){
            resultStr += dateStr1+" > "+dateStr2;
        }else if(result==-1){
            resultStr += dateStr1+" < "+dateStr2;
        }else{
            resultStr += "比较日期异常...";
        }
        logger.info("比较时间结果:"+result +" "+resultStr);
        
        
        return result;
        
    }
    
    /**
     * 比较两个date
     * @param date1
     * @param date2
     * @return  -2:比较时间异常
     *             -1: (date1 < date2) 
     *             0: (date1 = date2) 
     *             1: (date1 > date2)
     */
    public static int compareDate(Date date1,Date date2){
        int result = -2;//初始化状态
        if(date1==null||date2==null){
            return -2;
        }
        
        result = date1.compareTo(date2);
        logger.info("compareDate:"+result);
        
        return result;
    }
    
    /**
     * 获取传入date的几天前或几天后日期
     * @param date
     * @param daysCount 天数(正数:daysCount天后;负数:daysCount天前)
     * @return
     */
    public static Date getDayBeforeOrAfter(Date date,int daysCount){
        if(date==null){
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, daysCount);
        
        return c.getTime();
    }
    
    /**
     * 获取传入dateStr的几天前或几天后日期
     * @param dateStr
     * @param format 传入传出的日期字符串格式
     * @param daysCount 天数(正数:daysCount天后;负数:daysCount天前)
     * @return
     */
    public static String getDayBeforeOrAfter(String dateStr,String format,int daysCount){
        if(dateStr==null||"".equals(dateStr.trim())){
            return "";
        }
        logger.info("dateStr:"+dateStr+" format:"+format +" daysCount:"+daysCount);
        Date date = stringToDate(dateStr, format);
        date = getDayBeforeOrAfter(date, daysCount);
        dateStr = dateToString(date, format);
        logger.info("dateStr:"+dateStr);
        return dateStr;
    }
    
    /**
     * 获取date这个月的最后一天
     * @param date
     * @return
     */
    public static Date getDayMonthEnd(Date date){
        if(date==null){
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MONTH, 1);//得到下个月
        c.set(Calendar.DATE, 1);//设置下个月1号初始化
        c.add(Calendar.DATE, -1);//下个月1号减一天,即date当月的最后一天
        return c.getTime();
    }

    /**
     * 取两个日期的差值
     * @param startDate
     * @param endDate
     * @return int[]{days,hours,minutes,seconds}
     */
    public static int[] getDateDiff(Date startDate,Date endDate) {
        
        if(startDate==null||endDate==null){
            logger.error("getDaysDiff:传入的日期参数异常...");
            return null;
        }
        
        long time = (endDate.getTime() - startDate.getTime());//单位:毫秒
        
        time = Math.abs(time);
        
        time = time / 1000;//转成秒
        
        long days = time / (24 * 60 * 60);
        
        long hours = time % (24 * 60 * 60) / (60 * 60);
        
        long minutes = time % (60 * 60) / 60;
        
        long seconds = time % 60;
        
        logger.info("日期差值:"+days+"天 "+hours+"小时 "+minutes+"分钟 "+seconds+"秒");
        
        int[] diff = new int[]{(int)days,(int)hours,(int)minutes,(int)seconds};

        return diff;
    }


    /**
     * 得到date的daysCount天前/天后是星期几
     * @param date
     * @param daysCount
     * @return
     */
    public static String getAfterDayWeek(Date date,int daysCount) {
        
        date = getDayBeforeOrAfter(date, daysCount);
        String dateStr = dateToString(date, "E");
        
        logger.info("getAfterDayWeek:" + dateStr);

        return dateStr;
    }
    
    

    public static void main(String[] args) {
        Date a = stringToDate("20170106 23:57:59", "yyyyMMdd HH:mm:ss");
        Date b = stringToDate("20170107 23:56:59", "yyyyMMdd HH:mm:ss");
        
        getDateDiff(a, b);

    }

}

 

posted @ 2017-01-06 15:41  新手娃娃菜  阅读(458)  评论(0编辑  收藏  举报