java 日期工具类

/**
 * <h3>Class description</h3>
 * <h4>日期处理类</h4>
 *
 * <h4>Special Notes</h4>
 * 
 *
 * @ver 0.1
 * @author terry.wei
 * 2011-5-4
 */
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import org.jfree.util.Log;

import com.opensymphony.xwork2.ActionContext;

public class DateUtil {
    /**
     * 一天中的天数
     */
    public static long millionSecondsOfDay = 86400000;

    public final static String YYYYMMDD24HHMMSS = "yyyy-MM-dd HH:mm:ss";

    public final static String YYMMDD24HHMMSSSSS = "yyMMddHHmmssSSS";

    /**
     * 得到两个日期之间的天数,两头不算,取出数据后,可以根据需要再加
     * 
     * @author Vincent
     * @param date1
     * @param date2
     * @return
     */
    public static int getDay(Date date1, Date date2) {
        Long d2 = date2.getTime();
        Long d1 = date1.getTime();
        return (int) ((d2 - d1) / millionSecondsOfDay);
    }

    /**
     * 计算日期加天数
     * 
     * @author Vincent
     * @param date
     * @param days
     * @return
     */
    public static Date addDay(Date date, int days) {
        Calendar c = new GregorianCalendar();
        c.setTime(date);
        c.add(Calendar.DAY_OF_MONTH, days);
        return c.getTime();
    }

    /**
     * 根据指定日期格式格式化日期
     * 
     * @author Vincent
     * @param date
     * @param formater
     * @return
     */
    public static String format(Date date, String formater) {
        SimpleDateFormat sdf = new SimpleDateFormat(formater);
        return sdf.format(date);
    }

    /**
     * 格式化日期
     * 
     * @author Vincent
     * @param date
     * @param formater
     * @return
     */
    public static Date parse(String date, String formater) {
        SimpleDateFormat sdf = new SimpleDateFormat(formater);
        Date result = null;
        try {
            result = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 根据日期取出是星期几
     * 
     * @author Vincent
     * @param date
     *            Date
     * @return int 返回1-7
     */
    public static int getWeekOfDate(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return (calendar.get(Calendar.DAY_OF_WEEK) - 1) == 0 ? 7 : calendar.get(Calendar.DAY_OF_WEEK) - 1;
    }

    /**
     * format "yyyy-MM-dd HH:mm:ss"
     */
    public static String dateToString(Date date, String format) {
        if (date == null)
            return null;
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format(date).trim();

    }

    /**
     * 取Java虚拟机系统时间, 下一天时间
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateNext(Date date) {
        Calendar cl = Calendar.getInstance();
        cl.setTime(date);
        cl.add(Calendar.DATE, 1);
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
    }

    /**
     * 取Java虚拟机系统时间, 上一月
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateNext() {
        Calendar cl = Calendar.getInstance();
        cl.setTime(new Date());
        String monthValue = "";
        if (cl.get(Calendar.MONTH) + 2 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 2);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 2);
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
    }

    /**
     * 取Java虚拟机系统时间, 上一月
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateNextByDate(Date date) {
        Calendar cl = Calendar.getInstance();
        cl.setTime(date);
        String monthValue = "";
        if (cl.get(Calendar.MONTH) + 2 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 2);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 2);
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
    }

    /**
     * 取Java虚拟机系统时间, 当天月
     * 
     * @param selectMonthDate
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringTodayDate(Date selectMonthDate) {
        Calendar cl = Calendar.getInstance();
        cl.setTime(selectMonthDate);
        String monthValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
    }

    /**
     * 取Java虚拟机系统时间, 前一月
     * 
     * @param selectMonthDate
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateBack(Date selectMonthDate) {
        Calendar cl = Calendar.getInstance();
        cl.setTime(selectMonthDate);
        String monthValue = "";
        if (cl.get(Calendar.MONTH) < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH));
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH));
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
    }

    /**
     * 取Java虚拟机系统时间, 返回当前时间戳
     * 
     * @return Timestamp类型的时间
     */
    public static Timestamp getSysTimestamp() {
        return new Timestamp(System.currentTimeMillis());
    }

    private static String getDate(Date date, int dif) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, dif);
        String monthValue;
        String dateValue;
        if (calendar.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (calendar.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(calendar.get(Calendar.MONTH) + 1);
        }
        if (calendar.get(Calendar.DATE) < 10) {
            dateValue = "0" + (calendar.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(calendar.get(Calendar.DATE));
        }
        return calendar.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
    }

    /**
     * 取Java虚拟机系统时间, 下一天时间
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateNextByDate(String strDate) {
        Calendar cl = Calendar.getInstance();
        cl.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
        cl.add(Calendar.DATE, 1);
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
    }

    /**
     * 取Java虚拟机系统时间, 前一天时间
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateBackByDate(String strDate) {
        Calendar cl = Calendar.getInstance();
        cl.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
        cl.add(Calendar.DATE, -1);
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
    }

    /**
     * 取Java虚拟机系统时间, 当天时间
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateBackByDate() {
        Calendar cl = Calendar.getInstance();
        cl.setTime(new Date());
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        return cl.get(Calendar.YEAR) + "-" + 12 + "-" + 31;
    }

    /**
     * 取Java虚拟机系统时间, 当天时间
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDate() {
        Calendar cl = Calendar.getInstance();
        cl.setTime(new Date());
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
    }

    /**
     * 取Java虚拟机系统时间, 当天时间 与星期几
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringDateByWeek() {

        Calendar cl = Calendar.getInstance();
        cl.setTime(new Date());
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        String dateString = cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
        String weekString = "";
        DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");

        try {
            weekString = DateUtil.getD(format1.parse(dateString));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return weekString + "        " + dateString;
    }

    /**
     * 获取星期几
     * 
     * @return
     */
    public static String getD(Date d) {
        Locale localLanguage = ActionContext.getContext().getLocale();
        String languageValue = localLanguage.getLanguage();
        java.text.SimpleDateFormat f;
        if (languageValue != null && (languageValue.toUpperCase().indexOf("CN") >= 0 || languageValue.toUpperCase().indexOf("ZH") >= 0 || languageValue.toUpperCase().indexOf("zh_CN") >= 0)) {
            f = new java.text.SimpleDateFormat("EEEE", Locale.SIMPLIFIED_CHINESE);
        } else {
            f = new java.text.SimpleDateFormat("EEEE", Locale.US);
        }

        return f.format(d);
    }

    /**
     * 年月日时分秒
     * 
     * @return
     */
    public static String getSysStringYYYYMMDDHHMMSSDate() {
        Calendar cl = Calendar.getInstance();
        cl.setTime(new Date());
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue + " " + cl.get(Calendar.HOUR_OF_DAY) + ":" + cl.get(Calendar.MINUTE);
    }

    /**
     * 取Java虚拟机系统时间, 当天时间
     * 
     * @return 只返回String格式的日期,YYYY-MM-DD, 长10位
     */
    public static String getSysStringYear() {
        Calendar cl = Calendar.getInstance();
        cl.setTime(new Date());
        String monthValue = "";
        String dateValue = "";
        if (cl.get(Calendar.MONTH) + 1 < 10) {
            monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
        } else {
            monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
        }

        if (cl.get(Calendar.DATE) < 10) {
            dateValue = "0" + (cl.get(Calendar.DATE));
        } else {
            dateValue = String.valueOf(cl.get(Calendar.DATE));
        }
        return cl.get(Calendar.YEAR) + "";
    }

    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 获得当前日期与本周一相差的天数
    private static int getMondayPlus(String strDate) {
        Calendar cd = Calendar.getInstance();
        cd.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
        // 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
        int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
        if (dayOfWeek == 1) {
            return -6;
        } else {
            return 2 - dayOfWeek;
        }
    }

    // 获得上周星期一的日期
    public static String getPreviousMonday(String strDate) {
        int mondayPlus = getMondayPlus(strDate);
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * -1);
        Date monday = currentDate.getTime();
        return DateUtil.format(monday, "yyyy-MM-dd");
    }

    // 获得本周星期一的日期
    public static String getCurrentMonday(String strDate) {
        int mondayPlus = getMondayPlus(strDate);
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
        currentDate.add(GregorianCalendar.DATE, mondayPlus);
        Date monday = currentDate.getTime();
        return DateUtil.format(monday, "yyyy-MM-dd");
    }

    // 获得下周星期一的日期
    public static String getNextMonday(String strDate) {
        int mondayPlus = getMondayPlus(strDate);
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * 1);
        Date monday = currentDate.getTime();
        return DateUtil.format(monday, "yyyy-MM-dd");
    }

    /**
     * 获取本周周一
     * 
     * @param date
     * @return
     */
    public static String getCurrentWeekMon(Date date) {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance(); // 获取日历
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 将日历翻到这周的周一
        return sf.format(calendar.getTime());
    }

    /**
     * 获取本周周日
     * 
     * @param date
     * @return
     */
    public static String getCurrentWeekSun(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int dayofweek = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (dayofweek == 0)
            dayofweek = 7;
        c.add(Calendar.DATE, -dayofweek + 7);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(c.getTime());

    }

    /**
     * 获取前一个月的日期
     * 
     * @return 前一个月的日期
     */
    public static String getTodayBeforeMonth() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date currentTime = new Date();// 得到当前系统时间
        long now = currentTime.getTime();// 返回自 1970 年 1 月 1 日 00:00:00 GMT
                                            // 以来此Date 对象表示毫秒数
        currentTime = new Date(now - 86400000 * 24);
        long now1 = currentTime.getTime();
        currentTime = new Date(now1 - 86400000 * 6);
        String current = formatter.format(currentTime);
        return current;
    }

    /**
     * 计算两个时间之差
     * 
     * @param MaxDate
     * @param MinDate
     * @return
     */
    public static String calculateCostTime(Date MaxDate, Date MinDate) {
        String returnValue = "";
        if (MinDate != null && !"".equals(MinDate)) {
            long number = (MaxDate.getTime() - MinDate.getTime()) / 1000;
            if (number >= 0 && number < 60) {
                returnValue = String.valueOf(number) + " seconds";
            } else if (number >= 60 && number < 3600) {
                long minute = number / 60;
                returnValue = String.valueOf(minute) + " minutes";
            } else {
                long allMinute = number / 60;
                int hour = (int) (allMinute / 60);
                long minute = allMinute - (hour * 60);
                String hoursStr = "";
                if (hour <= 1) {
                    hoursStr = " hour ";
                } else {
                    hoursStr = " hours ";
                }
                returnValue = hour + hoursStr + minute + " minutes";
            }

        }

        return returnValue;
    }

    /**
     * 获取下个月的第一天
     * 
     * @param date
     * @return
     */
    public static Date getNextFirstDate(Date date) {

        GregorianCalendar nextFirstDay = new GregorianCalendar(new Integer(format(date, "yyyy")).intValue(), new Integer(format(date, "MM")).intValue() - 1, 1);
        nextFirstDay.add(GregorianCalendar.MONTH, 1);
        return nextFirstDay.getTime();
    }

    /**
     * 该月最后一天(不必管每月多少天了)
     * 
     * @param date
     * @return
     */

    public static Date getLastDay(Date date) {
        GregorianCalendar lastDay = new GregorianCalendar(new Integer(format(date, "yyyy")).intValue(), new Integer(format(date, "MM")).intValue() - 1, 1);
        lastDay.add(GregorianCalendar.MONTH, 1);
        lastDay.add(GregorianCalendar.DATE, -1);
        return lastDay.getTime();
    }

    /**
     * 英國時間轉中國
     * 
     * @param date
     * @return
     */
    public static String formatChinaDate(String englishDate, String englishFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(englishFormat, Locale.ENGLISH);
        long millionSeconds;
        Date date = null;
        try {
            millionSeconds = sdf.parse(englishDate).getTime();
            date = new Date(millionSeconds);
            sdf = new SimpleDateFormat("yyyy-MM-dd");
        } catch (ParseException e) {
            Log.error(e);
        }
        return sdf.format(date);
    }

    /**
     * 中國時間轉英國
     * 
     * @param date
     * @return
     */
    public static String formatEnglishDate(String chinaDate) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
        long millionSeconds;
        Date date = null;
        try {
            millionSeconds = sdf.parse(chinaDate).getTime();
            date = new Date(millionSeconds);
            sdf = new SimpleDateFormat("ddMMMyy", Locale.ENGLISH);
        } catch (ParseException e) {
            Log.error(e);
        }
        return sdf.format(date);
    }

  
}
原文地址:https://www.cnblogs.com/kasher/p/7355977.html