DateUtilt

package com.base.utils;

import org.apache.commons.lang.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


/**
 * 類DateUtil.java的實現描述:日期工具類
 */
public class DateUtil {

    public final static String YYYY_MM_DD_HH_MM    = "yyyy-MM-dd HH:mm";
    public final static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    public final static String YYYY_MM_DD_HH       = "yyyy-MM-dd HH";
    public final static String YYYY_MM_DD          = "yyyy-MM-dd";
    public final static String YYYY_MM             = "yyyy-MM";
    public final static String YYYYMMDD            = "yyyyMMdd";
    public final static String YYYYMMDDHH          = "yyyyMMddHH";
    public final static String YYYYMMDDHHMMSS      = "yyyyMMddHHmmss";
    public final static String YYYYMMDDHHMMSSSSS   = "yyyyMMddHHmmssSSS";
    public final static String YYYYMMDDHHMM        = "yyyyMMddHHmm";
    public final static String MM_DD               = "MM-dd";

    /**
     * 判斷傳入的日期是否爲同一天的日期
     * 
     * @param d1
     * @param d2
     * @return
     */
    public static boolean isSameDay(Date d1, Date d2) {
        String dateString1 = dateToStr(d1, YYYYMMDD);
        String dateString2 = dateToStr(d2, YYYYMMDD);
        if (dateString1.equals(dateString2)) {
            return true;
        }
        return false;
    }

    /**
     * 通過制定的格式,將日期字符串解析爲java.util.Date對象
     * 
     * @param dateStr 日期字符串
     * @param formatStr 解析的格式
     * @return 轉換後的結果:Date對象
     * @throws ParseException
     */
    public static Date strToDate(String dateStr, String formatStr) {
        Date date = null;
        if (dateStr != null && !"".equals(dateStr)) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
            try {
                date = sdf.parse(dateStr);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return date;
    }

    /**
     * 轉換字符串(long型格式) 爲java.util.Date對象
     * 
     * @param longStr
     * @return
     */
    public static Date longStrToDate(String longStr) {
        Date date = null;
        if (StringUtils.isNotBlank(longStr) && StringUtils.isNumeric(longStr)) {
            try {
                date = new Date(Long.parseLong(longStr));
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
        }
        return date;
    }

    /**
     * 根據一個完整的日期,格式化成一個只到分鐘的時間.yyyy-MM-dd HH:mm
     * 
     * @param date
     * @param formatFormat
     * @return
     */
    public static Date getMinuteDate(String date, String formatFormat) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(strToDate(date, formatFormat));
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }

    /**
     * 根據一個完整的日期,格式化成一個只到天的時間.yyyy-MM-dd
     * 
     * @param date
     * @param formatFormat
     * @return
     */
    public static Date getDayDate(String date, String formatFormat) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(strToDate(date, formatFormat));
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }

    /**
     * 通過制定的格式,將Date對象格式化爲字符串
     * 
     * @param date 需要轉換的Date對象
     * @param formatStr 轉換的格式
     * @return 轉換之後的字符串
     */
    public static String dateToStr(Date date, String formatStr) {
        String result = null;
        if (date != null) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
            result = sdf.format(date);
        }
        return result;
    }

    /**
     * 將字符串,格式化.
     * 
     * @param date
     * @param format
     * @return
     */
    public static String parseDateStr(String date, String format) {
        if (StringUtils.isEmpty(date) || StringUtils.isEmpty(format)) {
            return null;
        }
        SimpleDateFormat f = new SimpleDateFormat(format);

        return f.format(strToDate(date, format));
    }

    /**
     * 將一個字符串日期轉換成另一個字符串日期.
     * 
     * @param date 日期對象
     * @param fromFormat 原來的日期格式
     * @param toFormat 轉換後的日期格式
     * @return
     */
    public static String parseDateStr(String date, String fromFormat, String toFormat) {
        return dateToStr(strToDate(date, fromFormat), toFormat);
    }

    //
    /**
     * 獲取當前系統時間
     * 
     * @return
     */
    public static Date getCurrDate() {
        return new Date();
    }

    /**
     * 當前年份+99
     * 
     * @return
     */
    public static Date getEffectiveDate() {
        DateTime dt = new DateTime();
        DateTime minusMonths = dt.plusYears(70);
        return minusMonths.toDate();
    }

    /**
     * 獲取當前指定格式 的系統時間,可以改變分鐘的數值 ,加或者減,例如:-1,10.
     * 
     * @param formatStr 日期的格式化.
     * @param changeMinute 正數或者負數。
     * @return
     */
    public static String getCurrCustomMinuteDate(String formatStr, int changeMinute) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(getCurrDate());
        cal.add(Calendar.MINUTE, changeMinute);
        return dateToStr(cal.getTime(), formatStr);
    }

    /**
     * 得到當前日期的 指定時間
     * 
     * @param hour
     * @param min
     * @param sec
     * @return
     */
    public static Date getCurrDateFixTime(int hour, int min, int sec) {
        Calendar cal = new GregorianCalendar();

        cal.setTime(getCurrDate());
        cal.set(Calendar.HOUR_OF_DAY, hour);
        cal.set(Calendar.MINUTE, min);
        cal.set(Calendar.SECOND, sec);

        return cal.getTime();
    }

    /**
     * 獲取當前指定格式的系統時間
     * 
     * @param formatStr
     * @return
     */
    public static String getCurrDate(String formatStr) {
        return dateToStr(getCurrDate(), formatStr);
    }

    /**
     * 獲取指定日期的小時 如果date爲nul則返回-1.
     * 
     * @param date
     * @return
     */
    public static int getHour(Date date) {
        if (date == null) {
            return -1;
        }
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 獲取指定日期的天,如果date爲null則返回-1;
     * 
     * @param date
     * @return
     */
    public static int getDay(Date date) {
        if (date == null) {
            return -1;
        }
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 獲取當月最大的天數.
     * 
     * @param date
     * @return
     */
    public static int getMonthMaxDay(Date date) {
        if (date == null) {
            return -1;
        }
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.getActualMaximum(Calendar.DATE);
    }

    /**
     * 獲取當前日期對應的上一個月的日期.
     * 
     * @return
     */
    public static Date getCurrUpMonthDate() {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.MONTH, -1);
        return c.getTime();
    }

    /**
     * 獲取當前日期對應的前n個月的日期.
     * 
     * @param n
     * @return
     */
    public static Date getCurrUpMonthDate(int n) {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.MONTH, -n);
        return c.getTime();
    }

    /**
     * 獲取指定日期的上一個月的日期
     * 
     * @return
     */
    public static Date getUpMonthDate(String date, String dateFormat) {
        Calendar c = new GregorianCalendar();
        c.setTime(strToDate(date, dateFormat));
        c.add(Calendar.MONTH, -1);
        return c.getTime();
    }

    /**
     * 獲取當前日期對應的上一天的日期.
     * 
     * @return
     */
    public static Date getCurrUpDayDate() {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.DATE, -1);
        return c.getTime();
    }

    /**
     * 獲取當前日期對應的下一天的日期.
     * 
     * @return
     */
    public static Date getCurrNextDayDate() {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.DATE, 1);
        return c.getTime();
    }

    /**
     * 獲取當前日期對應的前n天的日期.
     * 
     * @param n
     * @return
     */
    public static Date getCurrUpDayDate(int n) {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.DATE, -n);
        return c.getTime();
    }

    /**
     * 獲取當前日期對應的後n天的日期.
     * 
     * @param n
     * @return
     */
    public static Date getCurrNextDayDate(int n) {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.DATE, n);
        return c.getTime();
    }

    /**
     * 獲取指定日期對應的後n天的日期.
     * @param n
     * @param date
     * @return
     */
    public static Date getCurrNextDayDate(int n ,Date date) {
        Calendar c = new GregorianCalendar();
        c.setTime(date);
        c.add(Calendar.DATE, n);
        return c.getTime();
    }

    /**
     * 獲取當前日期對應的後n分鐘的日期.
     * 
     * @param n
     * @return
     */
    public static Date getCurrNextMinuteDate(int n) {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.MINUTE, n);
        return c.getTime();
    }

    /**
     * 獲取指定日期的上一天的日期。
     * 
     * @param date
     * @param dateFormat
     * @return
     */
    public static Date getUpDayDate(String date, String dateFormat) {
        Calendar c = new GregorianCalendar();
        c.setTime(strToDate(date, dateFormat));
        c.add(Calendar.DAY_OF_MONTH, -1);
        return c.getTime();
    }

    /**
     * 獲取指定日期的下一天的日期。
     * 
     * @param date
     * @param dateFormat
     * @return
     */
    public static Date getNextDayDate(Date date, String dateFormat) {
        Calendar c = new GregorianCalendar();
        c.setTime(date);
        c.add(Calendar.DAY_OF_MONTH, 1);
        return c.getTime();
    }

    /**
     * 獲取指定日期的上n周的日期。
     * 
     * @param n
     * @return
     */
    public static Date getCurrUpWeekDate(int n) {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.add(Calendar.DAY_OF_MONTH, -7 * n);
        return c.getTime();
    }

    /**
     * 獲取指定日期的上一週的日期。
     * 
     * @param date
     * @param dateFormat
     * @return
     */
    public static Date getUpWeekDate(String date, String dateFormat) {
        Calendar c = new GregorianCalendar();
        c.setTime(strToDate(date, dateFormat));
        c.add(Calendar.DAY_OF_MONTH, -7);
        return c.getTime();
    }

    /**
     * 計算指定日期加上後面2個日期之間的差值的日期,精確到秒
     * 
     * @param d1 指定日期
     * @param d2 計算差值日期1
     * @param d3 計算差值日期2
     * @return
     */
    public static Date addDateInterval(Date d1, Date d2, Date d3) {
        long d1LongValue = d1.getTime();
        long d2LongValue = d2.getTime();
        long d3LongValue = d3.getTime();
        long lastDateValue = d1LongValue + Math.abs(d3LongValue - d2LongValue);
        Date newDate = new Date(lastDateValue);
        return newDate;
    }

    /**
     * 計算指定日期加上增量時間後的日期,精確到秒
     * 
     * @param date 待處理的日期
     * @param addition 增加的毫秒數
     * @return Date
     */
    public static Date addDate(Date date, long addition) {
        long dateLongValue = date.getTime();
        long lastDateValue = dateLongValue + addition;
        Date newDate = new Date(lastDateValue);
        return newDate;
    }

    /**
     * 檢查傳入日期是否在當前日期之前
     * 
     * @return boolean
     */
    public static boolean isLate(Date date) {
        return getCurrDate().after(date);
    }

    /**
     * 獲取兩個日期的時間差(單位:毫秒)
     * 
     * @param startDateStr
     * @param endDateStr
     * @return
     */
    public static long getIntervalMilSeconds(String startDateStr, String endDateStr, String dateFormat)
                                                                                                       throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat(dateFormat);
        Date startDate = format.parse(startDateStr);
        Date endDate = format.parse(endDateStr);
        return endDate.getTime() - startDate.getTime();
    }

    /**
     * java.sql.Timestamp轉換爲java.util.Date
     * 
     * @param time
     * @return
     */
    public static Date timestampToDate(Timestamp time) {
        return new Date(time.getTime());
    }

    /**
     * 獲得當天是周幾 1-7
     * 
     * @return
     */
    public static int getCurrWeek() {
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        return dayOfWeek == 0 ? 7 : dayOfWeek;
    }

    /**
     * 獲取指定日期的分鐘 如果date爲nul則返回-1.
     * 
     * @param date
     * @return
     */
    public static int getMinute(Date date) {
        if (date == null) {
            return -1;
        }
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.MINUTE);
    }

    /**
     * 獲取當前時間一個月的時間
     * @return
     */
    public static String getAMonthLater(){
        DateTimeFormatter format1 = DateTimeFormat.forPattern("yyyy月MM日dd日 HH:mm:ss");
        DateTime dt = new DateTime();
        DateTime before1month = dt.plusMonths(1);
        return before1month.toString(format1);


    }

    /**
     * 獲取當前掃碼時間
     * @return
     */
    public static String getCurrentDate(){
        DateTimeFormatter format1 = DateTimeFormat.forPattern("yyyy月MM日dd日 HH:mm:ss");
        DateTime dt = new DateTime();
        return dt.toString(format1);


    }

    public static void main(String[] args) {
        Date effectiveDate = DateUtil.getEffectiveDate();
        System.out.println(effectiveDate.toLocaleString());
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章