Java的日期工具类

public class DateUtil {

    private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 获取当前的系统时间
     * @return 系统时间
     */
    public static Date currentDate(){
        return new Date();
    }

    /**
     * 将 date 格式的字符串转换为一个日期对象
     * @param dateStr  date 格式的字符串
     * @param pattern  日期字符串的格式
     * @return 日期对象
     */
    public static Date str2Date(String dateStr,String pattern) {
        try {
            SimpleDateFormat sf = new SimpleDateFormat(pattern);
            return sf.parse(dateStr);
        } catch (ParseException e) {
            throw new RuntimeException("字符串转换日期出错,字符串:" + dateStr+",格式为:" + pattern,e);
        }
    }

    /**
     * 将 date 格式的字符串转换为一个日期对象
     * 使用默认的格式: yyyy-MM-dd HH:mm:ss
     * @param dateStr  date 格式的字符串
     * @return 日期对象
     */
    public static Date str2Date(String dateStr) {
        return str2Date(dateStr,DEFAULT_PATTERN);
    }

    /**
     * 将日期转为字符串
     * @param date      日期
     * @param pattern   日期格式
     * @return 转换后的字符串
     */
    public static String date2String( Date date , String pattern){
        SimpleDateFormat sf= new SimpleDateFormat(pattern);
        return sf.format(date);
    }

    /**
     * 将日期转为字符串
     * 使用默认的格式: yyyy-MM-dd HH:mm:ss
     * @param date      日期
     * @return 转换后的字符串
     */
    public static String date2String(Date date){
        return date2String(date,DEFAULT_PATTERN);
    }

    /**
     * 获取当前系统时间的下一天的日期
     * @return 日期对象
     */
    public static Date getNextDay(){
        return getNextDay(currentDate(),1);
    }

    /**
     * 获取特定日期的下一天
     * @param oriDate 某个日期
     * @return 下一天的日期
     */
    public static Date getNextDay(Date oriDate){
        return getNextDay(oriDate,1);
    }

    /**
     * 获取指定日期的指定天数后的日期
     * @param oriDate 原始日期
     * @param amount  天数
     * @return 新日期
     */
    public static Date getNextDay(Date oriDate,int amount){
        Calendar c = Calendar.getInstance();
        c.setTime(oriDate);
        c.add(Calendar.DAY_OF_MONTH,amount);
        return c.getTime();
    }

    /**
     * 获取当前系统日期的指定天数后的日期
     * @param amount  天数
     * @return 新日期
     */
    public static Date getNextDay(int amount){
        return getNextDay(currentDate(),amount);
    }

    /**
     * 获取年份
     * @param date 日期
     * @return 年份
     */
    public static Integer getYear(Date date){
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.YEAR);
    }

    /**
     * 获取月份
     * @param date 日期
     * @return 月份
     */
    public static Integer getMonth(Date date){
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MONTH) + 1;
    }

    /**
     * 获取日期
     * @param date 日期
     * @return 日期
     */
    public static Integer getDate(Date date){
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 获取小时
     * @param date 日期
     * @return 小时
     */
    public static Integer getHour(Date date){
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.HOUR_OF_DAY);

    }

    /**
     * 获取分钟
     * @param date 日期
     * @return 分钟
     */
    public static Integer getMinute(Date date){
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MINUTE);
    }
    /**
     * 获取秒数
     * @param date 日期
     * @return 秒数
     */
    public static Integer getSecond(Date date){
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.SECOND);
    }


    /**
     * 获取两个日期相差的天数: 精确到秒
     * @param startDate 起始日期  7.22 15
     * @param endDate 终止日期    7.24 16
     * @return 天数
     */
    public static Integer getDurationWithSecond(Date startDate,Date endDate){
        int duration = 0;
        while (startDate.before(endDate)){
            startDate =  getNextDay(startDate);
            duration++;
        }
        return duration;
    }

    /**
     * 获取两个日期相差的天数: 精确到天
     * @param startDate 起始日期  7.22 13
     * @param endDate 终止日期    7.24 15
     * @return 天数
     */
    public static Integer getDurationWithDay(Date startDate,Date endDate){
        Calendar start = Calendar.getInstance();
        Calendar end = Calendar.getInstance();
        clearTime(start);
        clearTime(end);
        return getDurationWithSecond(start.getTime(),end.getTime());
    }

    /**
     * 获取一个日期
     * @param year  年
     * @param month 月
     * @param day   日
     * @return
     */
    public static Date getDate(int year,int month,int day){
        Calendar c = Calendar.getInstance();
        c.set(year, month-1, day,0,0,0);
        return c.getTime();
    }

    /**
     * 获取一个日期
     * @param year   年
     * @param month  月
     * @param day    日
     * @param hour   时
     * @param minute 分
     * @param second 秒
     * @return
     */
    public static Date getDate(int year,int month,int day,int hour,int minute,int second){
        Calendar c = Calendar.getInstance();
        c.set(year, month-1, day, hour, minute, second);
        return c.getTime();
    }

    private static void clearTime(Calendar calendar){
        calendar.set(Calendar.HOUR,0);
        calendar.set(Calendar.MINUTE,0);
        calendar.set(Calendar.SECOND,0);
    }

}
上一篇:JAVA 日期与格式化


下一篇:Java 常见的系统类