时间工具类

工具类一:

package com.common.time;

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

/**
 * 
 * 功能描述:
 * 
 * @author Administrator
 * @Date Jul 19, 2008
 * @Time 9:47:53 AM
 * @version 1.0
 */
public class DateUtil {

    public static Date date = null;

    public static DateFormat dateFormat = null;

    public static Calendar calendar = null;

    /**
     * 功能描述:格式化日期
     * 
     * @param dateStr
     *            String 字符型日期
     * @param format
     *            String 格式
     * @return Date 日期
     */
    public static Date parseDate(String dateStr, String format) {
        try {
            dateFormat = new SimpleDateFormat(format);
            String dt = dateStr.replaceAll("-", "/");
            if ((!dt.equals("")) && (dt.length() < format.length())) {
                dt += format.substring(dt.length()).replaceAll("[YyMmDdHhSs]",
                    "0");
            }
            date = (Date) dateFormat.parse(dt);
        } catch (Exception e) {}
        return date;
    }

    /**
     * 功能描述:格式化日期
     * 
     * @param dateStr
     *            String 字符型日期:YYYY-MM-DD 格式
     * @return Date
     */
    public static Date parseDate(String dateStr) {
        return parseDate(dateStr, "yyyy/MM/dd");
    }

    /**
     * 功能描述:格式化输出日期
     * 
     * @param date
     *            Date 日期
     * @param format
     *            String 格式
     * @return 返回字符型日期
     */
    public static String format(Date date, String format) {
        String result = "";
        try {
            if (date != null) {
                dateFormat = new SimpleDateFormat(format);
                result = dateFormat.format(date);
            }
        } catch (Exception e) {}
        return result;
    }

    /**
     * 功能描述:
     * 
     * @param date
     *            Date 日期
     * @return
     */
    public static String format(Date date) {
        return format(date, "yyyy/MM/dd");
    }

    /**
     * 功能描述:返回年份
     * 
     * @param date
     *            Date 日期
     * @return 返回年份
     */
    public static int getYear(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }

    /**
     * 功能描述:返回月份
     * 
     * @param date
     *            Date 日期
     * @return 返回月份
     */
    public static int getMonth(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }

    /**
     * 功能描述:返回日份
     * 
     * @param date
     *            Date 日期
     * @return 返回日份
     */
    public static int getDay(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 功能描述:返回小时
     * 
     * @param date
     *            日期
     * @return 返回小时
     */
    public static int getHour(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 功能描述:返回分钟
     * 
     * @param date
     *            日期
     * @return 返回分钟
     */
    public static int getMinute(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MINUTE);
    }

    /**
     * 返回秒钟
     * 
     * @param date
     *            Date 日期
     * @return 返回秒钟
     */
    public static int getSecond(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.SECOND);
    }

    /**
     * 功能描述:返回毫秒
     * 
     * @param date
     *            日期
     * @return 返回毫秒
     */
    public static long getMillis(Date date) {
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.getTimeInMillis();
    }

    /**
     * 功能描述:返回字符型日期
     * 
     * @param date
     *            日期
     * @return 返回字符型日期 yyyy/MM/dd 格式
     */
    public static String getDate(Date date) {
        return format(date, "yyyy/MM/dd");
    }

    /**
     * 功能描述:返回字符型时间
     * 
     * @param date
     *            Date 日期
     * @return 返回字符型时间 HH:mm:ss 格式
     */
    public static String getTime(Date date) {
        return format(date, "HH:mm:ss");
    }

    /**
     * 功能描述:返回字符型日期时间
     * 
     * @param date
     *            Date 日期
     * @return 返回字符型日期时间 yyyy/MM/dd HH:mm:ss 格式
     */
    public static String getDateTime(Date date) {
        return format(date, "yyyy/MM/dd HH:mm:ss");
    }

    /**
     * 功能描述:日期相加
     * 
     * @param date
     *            Date 日期
     * @param day
     *            int 天数
     * @return 返回相加后的日期
     */
    public static Date addDate(Date date, int day) {
        calendar = Calendar.getInstance();
        long millis = getMillis(date) + ((long) day) * 24 * 3600 * 1000;
        calendar.setTimeInMillis(millis);
        return calendar.getTime();
    }

    /**
     * 功能描述:日期相减
     * 
     * @param date
     *            Date 日期
     * @param date1
     *            Date 日期
     * @return 返回相减后的日期
     */
    public static int diffDate(Date date, Date date1) {
        return (int)((getMillis(date) - getMillis(date1)) / (24 * 3600 * 1000));
    }

    /**
     * 功能描述:取得指定月份的第一天
     * 
     * @param strdate
     *            String 字符型日期
     * @return String yyyy-MM-dd 格式
     */
    public static String getMonthBegin(String strdate) {
        date = parseDate(strdate);
        return format(date, "yyyy-MM") + "-01";
    }

    /**
     * 功能描述:取得指定月份的最后一天
     * 
     * @param strdate
     *            String 字符型日期
     * @return String 日期字符串 yyyy-MM-dd格式
     */
    public static String getMonthEnd(String strdate) {
        date = parseDate(getMonthBegin(strdate));
        calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return formatDate(calendar.getTime());
    }

    /**
     * 功能描述:常用的格式化日期
     * 
     * @param date
     *            Date 日期
     * @return String 日期字符串 yyyy-MM-dd格式
     */
    public static String formatDate(Date date) {
        return formatDateByFormat(date, "yyyy-MM-dd");
    }

    /**
     * 功能描述:以指定的格式来格式化日期
     * 
     * @param date
     *            Date 日期
     * @param format
     *            String 格式
     * @return String 日期字符串
     */
    public static String formatDateByFormat(Date date, String format) {
        String result = "";
        if (date != null) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                result = sdf.format(date);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }

    public static void main(String[] args) {
        Date d = new Date();
        // System.out.println(d.toString());
        //		System.out.println(formatDate(d).toString());
        // System.out.println(getMonthBegin(formatDate(d).toString()));
        // System.out.println(getMonthBegin("2008/07/19"));
        // System.out.println(getMonthEnd("2008/07/19"));
        System.out.println(addDate(d, 15).toString());
    }

}

工具类二:

package www.mingketang.com;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;


public class DateUtils {

    //http响应头Expire属性时间格式   
    public static final String HTTP_RESPONSE_DATE_HEADER = "EEE, dd MMM yyyy HH:mm:ss zzz";

    //http响应头Expire属性时间格式工具   
    public static final SimpleDateFormat responseHeaderFormat = new SimpleDateFormat(HTTP_RESPONSE_DATE_HEADER, Locale.US);

    static {
        responseHeaderFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    }

    /**  
     * 某个时间点的下个月的第一天  
     * @param day  
     * @return  
     */
    public static Date firstDayInNextMonth(Date day) {
        Calendar c = Calendar.getInstance();
        c.setTime(day);
        c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);
        c.set(Calendar.DAY_OF_MONTH, 1);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        return c.getTime();
    }

    /**  
     * 获取某天在星期中的排序值:  
     * 星期日 -> 星期六 对应为:1 -> 7  
     * @param date  
     * @return  
     */
    public static int getDateInWeek(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_WEEK);
    }

    /**  
     * 获取指定日期后n天的凌晨  
     * @param date  
     * @param n  
     * @return  
     */
    public static Date getDateNextDay(Date date, int n) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, n);
        return c.getTime();
    }

    /**  
     * 获取下n个月后的日期  
     * @param n 月份偏移量  
     * @return  
     */
    public static Date getDateNextMonth(int n) {
        Calendar now = Calendar.getInstance();
        now.set(Calendar.MONTH, now.get(Calendar.MONTH) + n); // 设置时间向前进n个月   
        now.set(Calendar.HOUR_OF_DAY, 0);
        now.set(Calendar.MINUTE, 0);
        now.set(Calendar.SECOND, 0);
        return now.getTime();
    }

    /**  
     * 获取今天在本月中的号码  
     * @return  
     */
    public static int getDateOfMoth() {
        return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
    }

    /**  
     * 本月的所有日期集合  
     * @return  
     */
    public static List < Date > getDatesInMonth() {

        List < Date > dates = new ArrayList < Date > ();

        Calendar c = Calendar.getInstance();

        // 设置代表的日期为1号   
        c.set(Calendar.DATE, 1);

        // 获得当前月的最大日期数   
        int maxDay = c.getActualMaximum(Calendar.DATE);

        for (int i = 1; i <= maxDay; i++) {
            c.set(Calendar.DATE, i);
            dates.add(c.getTime());
        }

        return dates;
    }

    /**  
     * 获取某个时间所在的月份  
     * @param date  
     * @return  
     */
    public static int getMonth(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MONTH) + 1;
    }

    /**  
     * 获取本月最后一天  
     * @return  
     */
    public static Date getMonthEnd() {
        int length = getDateOfMoth();
        Calendar c = Calendar.getInstance();
        c.set(Calendar.DATE, length);
        c.set(Calendar.HOUR, 24);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        return c.getTime();
    }

    /**  
     * 获取某个时间所在月份的最后一秒  
     * @param date   
     * @return  
     */
    public static Date getMonthEnd(Date date) {
        if (date == null) {
            return null;
        }
        Calendar start = Calendar.getInstance();
        start.setTime(date);
        start.set(Calendar.MONTH, start.get(Calendar.MONTH) + 1);
        start.set(Calendar.DAY_OF_MONTH, 1);
        start.set(Calendar.HOUR, 0);
        start.set(Calendar.MINUTE, 0);
        start.set(Calendar.SECOND, 0);
        return start.getTime();
    }

    /**  
     * 获取某个时间所在月份的第一天凌晨  
     * @param date   
     * @return  
     */
    public static Date getMonthStart(Date date) {
        if (date == null) {
            return null;
        }
        Calendar start = Calendar.getInstance();
        start.setTime(date);
        start.set(Calendar.DAY_OF_MONTH, 1);
        start.set(Calendar.HOUR, 0);
        start.set(Calendar.MINUTE, 0);
        start.set(Calendar.SECOND, 0);
        return start.getTime();
    }

    /**  
     * 获取今天凌晨  
     * @return  
     */
    public static Date getMorning() {
        return getMorning(new Date());
    }

    /**  
     * 获取指定时间当天的凌晨  
     * @param date 给定时间当天的凌晨  
     * @return  
     */
    public static Date getMorning(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        return c.getTime();
    }

    /**  
     * 获取当前时间N天后的凌晨  
     */
    public static Date getMorningNextDate(int n) {
        Calendar now = Calendar.getInstance();
        now.set(Calendar.DATE, now.get(Calendar.DATE) + n); //设置时间向前进n天   
        now.set(Calendar.HOUR_OF_DAY, 0);
        now.set(Calendar.MINUTE, 0);
        now.set(Calendar.SECOND, 0);
        return now.getTime();
    }

    /**  
     * 系统当前时间过N个月后的时间  
     * @param nextStep 月份偏移量  
     * @return  
     */
    public static Date getNextMonth(int nextStep) {
        Calendar c = Calendar.getInstance();
        int m = c.get(Calendar.MONTH);
        c.set(Calendar.MONTH, m + nextStep);
        return c.getTime();
    }

    /**  
     * 计算给定时间推进一个月对应的时间  
     * @param date 给定时间  
     * @return 某时间过一个月后所在的时间  
     */
    public static Date getNextMonthToday(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);
        return c.getTime();
    }

    /**  
     * 获取系统当前时间所在的年份  
     * @return  
     */
    public static int getYear() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**  
     * 获取给定时间所在的年份  
     * @param date 时间  
     * @return 时间所在的年份  
     */
    public static int getYear(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.YEAR);
    }

    /**  
     * 获取某年分的最后一天结束的时间  
     * @param year 年份  
     * @return 指定年份的最后一天结束  
     */
    public static Date getYearEnd(int year) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.DECEMBER);
        c.set(Calendar.DAY_OF_MONTH, 31);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }

    /**  
     * 获取某年份的第一天凌晨  
     * @param year 年份  
     * @return 指定年份的第一天凌晨  
     */
    public static Date getYearStart(int year) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DAY_OF_MONTH, 1);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        return c.getTime();
    }
}

工具类三:

import static java.util.Calendar.HOUR_OF_DAY;
import static java.util.Calendar.MILLISECOND;
import static java.util.Calendar.MINUTE;
import static java.util.Calendar.SECOND;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DateUtil extends org.apache.commons.lang.time.DateUtils {

    /**
     * 默认的日期格式化样式
     */
    public static final String DAY_PATTERN = “yyyy - MM - dd”;
    /**
     * 默认的时间格式化样式
     */
    public static final String TIME_PATTERN = “HH: mm: ss”;

    /**
     * 将Date格式化成符合默认格式的字符串
     *
     * @param date
     * @return 返回样例:2012-03-29 14:32:23
     */
    public static String format(Date date) {
        SimpleDateFormat formatTool = new SimpleDateFormat();
        formatTool.applyPattern(DAY_PATTERN + ”” +TIME_PATTERN);
        return formatTool.format(date);
    }

    /**
     * 将Date格式化成符合默认日期格式的字符串
     *
     * @param date
     * @return 返回样例:2012-03-29
     */
    public static String formatDate(Date date) {
        SimpleDateFormat formatTool = new SimpleDateFormat();
        formatTool.applyPattern(DAY_PATTERN);
        return formatTool.format(date);
    }

    /**
     * 将Date格式化成符合默认时间格式的字符串
     *
     * @param date
     * @return 返回样例:14:32:23
     */
    public static String formatTime(Date date) {
        SimpleDateFormat formatTool = new SimpleDateFormat();
        formatTool.applyPattern(TIME_PATTERN);
        return formatTool.format(date);
    }

    /**
     * 按照pattern格式格式化Date
     *
     * @param date
     * @param pattern
     * 样例: yyyy/MM/dd
     * @return 返回样例:2012/03/29
     */
    public static String format(Date date, String pattern) {
        SimpleDateFormat formatTool = new SimpleDateFormat();
        formatTool.applyPattern(pattern);
        return formatTool.format(date);
    }

    /**
     * 将符合默认格式的字符串转换成Date
     *
     * @param dateValue
     * 样例:2012-03-29 14:32:23
     * @return
     * @throws ParseException
     */
    public static Date parse(String dateValue) throws ParseException {
        SimpleDateFormat formatTool = new SimpleDateFormat();
        formatTool.applyPattern(DAY_PATTERN + ”” +TIME_PATTERN);
        return formatTool.parse(dateValue);
    }

    /**
     * 将符合默认格式的日期字符串转换成Date
     *
     * @param dateValue
     * 样例:2012-03-29
     * @return
     * @throws ParseException
     */
    public static Date parseDate(String dateValue) throws ParseException {
        SimpleDateFormat formatTool = new SimpleDateFormat();
        formatTool.applyPattern(DAY_PATTERN);
        return formatTool.parse(dateValue);
    }

    /**
     * 将符合pattern格式的dateValue转换成Date
     *
     * @param dateValue
     * 样例:2012/03/29
     * @param pattern
     * 样例:yyyy/MM/dd
     * @return
     * @throws ParseException
     */
    public static Date parse(String dateValue, String pattern)
    throws ParseException {
        SimpleDateFormat formatTool = new SimpleDateFormat();
        formatTool.applyPattern(pattern);
        return formatTool.parse(dateValue);
    }

    /**
     * 返回这一天的最早的时候
     *
     * @param date
     * @return
     */
    public static Date getEarliest(Date date) {
        return parseTime(date, 0, 0, 0, 0);
    }

    /**
     * 返回这一天的最晚时候
     *
     * @param date
     * @return
     */
    public static Date getLastest(Date date) {
        return parseTime(date, 23, 59, 59, 999);
    }

    /**
     * 得到指定月的天数
     *
     * @param year
     * @param month
     * @return
     */
    public static int getMonthLastDay(int year, int month) {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.YEAR, year);
        a.set(Calendar.MONTH, month– 1);
        a.set(Calendar.DATE, 1); // 把日期设置为当月第一天 a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 int maxDate = a.get(Calendar.DATE);
        return maxDate;
    }

    /**
     * 返回指定时间加上num天后的时间
     *
     * @param date
     * @param num
     * @return
     */
    public static Date add(Date date, int num) {
        Calendar a = Calendar.getInstance();
        a.setTime(date);
        a.add(Calendar.DAY_OF_MONTH, num);
        return a.getTime();
    }

    /**
     * 返回false:date=null,date是1970年;其它都返回true
     *
     * @param date
     * @return
     */
    public static boolean isNotEmpty(Date date) {
        if (date != null) {
            Calendar a = Calendar.getInstance();
            a.setTime(date);
            return a.get(Calendar.YEAR) != 1970;
        }
        return Boolean.FALSE;
    }

    /**
     * 获得date的小时数0-23
     *
     * @param date
     * @return
     */
    public static int getHours(Date date) {
        Calendar a = Calendar.getInstance();
        a.setTime(date);
        return a.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 获得date是一周的第几天,注意:周日 返回 1,周六 返回 7
     *
     * @param date
     * @return
     */
    public static int getDay(Date date) {
        Calendar a = Calendar.getInstance();
        a.setTime(date);
        return a.get(Calendar.DAY_OF_WEEK);
    }

    /**
     * 设定date的时间细节
     *
     * @param date
     * 要设定时间细节的date
     * @param hourOfDay
     * 0-23
     * @param minute
     * 0-59
     * @param second
     * 0-59
     * @param milliSecond
     * 0-999
     * @return
     */
    public static Date parseTime(Date date, int hourOfDay, int minute,
        int second, int milliSecond) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        setCalendarTime(cal, hourOfDay, minute, second, milliSecond);
        return cal.getTime();
    }

    /**
     * 设定date的时间细节
     *
     * @param date
     * 要设定时间细节的date
     * @param timeDetail
     * 以:号分隔的24小时制的时间,例:16:23:42:267 或 16(等同于16:00:00:000)
     * @return
     */
    public static Date parseTime(Date date, String timeDetail) {

        List < String > strList = new ArrayList < String > ();
        strList.addAll(Arrays.asList(timeDetail.split(“: ”)));

        while (strList.size() < 4) {
            strList.add(“0″);
        }
        return parseTime(date, Integer.parseInt(strList.get(0)),
            Integer.parseInt(strList.get(1)),
            Integer.parseInt(strList.get(2)),
            Integer.parseInt(strList.get(3)));
    }

    /**
     * 指定时间 是否在 当前时间 之后,注:和日期无关
     *
     * @param time
     * 指定的时间, 传入样例:16:23:42:267 或 16(等同于16:00:00:000)
     * @return
     */
    public static boolean isAfterTime(String time) {
        Date date = parseTime(new Date(), time);
        return date.after(new Date());
    }

    /**
     * 指定时间 是否在 当前时间 之前,注:和日期无关
     *
     * @param time
     * 指定的时间, 传入样例:16:23:42:267 或 16(等同于16:00:00:000)
     * @return
     */
    public static boolean isBeforeTime(String time) {
        Date date = parseTime(new Date(), time);
        return date.before(new Date());
    }

    private static void setCalendarTime(Calendar cal, int hourOfDay,
        int minute, int second, int milliSecond) {
        cal.set(HOUR_OF_DAY, hourOfDay);
        cal.set(MINUTE, minute);
        cal.set(SECOND, second);
        cal.set(MILLISECOND, milliSecond);
    }
}

ok!

原文地址:https://www.cnblogs.com/zhaokejin/p/10923673.html