java中比較兩個日期的大小

java中比較兩個日期的大小

工具類

package com.wanggs.utils;

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

public class DateUtil {

    /**
     * 獲取兩個時間之間的天數(shù)
     * @param maxDate 大的日期
     * @param minDate 小的日期
     * @return
     * @throws Exception
     */
    public static int getDay(Date maxDate,Date minDate) throws Exception {
        int day = 0;
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
        minDate=sdf.parse(sdf.format(minDate));  
        maxDate=sdf.parse(sdf.format(maxDate));  
        Calendar cal = Calendar.getInstance();    
        cal.setTime(minDate);    
        long time1 = cal.getTimeInMillis();                 
        cal.setTime(maxDate);    
        long time2 = cal.getTimeInMillis();         
        long between_days=(time2-time1)/(1000*3600*24); 
        if (between_days>0) {
            day = Integer.parseInt(String.valueOf(between_days));
        }
        return day;
    }
    
    /**
     * 由出生日期獲得年齡
     * 
     * @param birthDay
     * @return
     * @throws Exception
     */
    public static int getAge(Date birthDay) throws Exception {
        Calendar cal = Calendar.getInstance();
        if (cal.before(birthDay)) {
            throw new IllegalArgumentException("The birthDay is before Now.It's unbelievable!");
        }
        //獲取當前年
        int yearNow = cal.get(Calendar.YEAR);
        //獲取當前月
        int monthNow = cal.get(Calendar.MONTH);
        //獲取當日
        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
        cal.setTime(birthDay);
        //獲取出生那年
        int yearBirth = cal.get(Calendar.YEAR);
        //獲取出生月
        int monthBirth = cal.get(Calendar.MONTH);
        //獲取出生日
        int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
        //年紀
        int age = yearNow - yearBirth;
        //如果現(xiàn)在的月份小于生日的月份,年齡-1,如果等于出生的月份,日前小于生日日期,年齡-1
        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                if (dayOfMonthNow < dayOfMonthBirth)
                    age--;
            } else {
                age--;
            }
        }
        return age;
    }
}

測試

package com.wanggs.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;

/**
 * Created by wanggs on 2017/9/6.
 */
public class DateTest {
    public static void main(String[] args) throws Exception {

        String beginTime=new String("2014-09-15 10:22:22");
        String endTime=new String("2014-09-22 11:22:22");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date bt = sdf.parse(beginTime);
        Date et = sdf.parse(endTime);
        // 獲取年齡
        int age =  DateUtil.getAge(bt);
        System.out.println(age);

        // 獲取兩個時間的天數(shù)
        int resultAge =  DateUtil.getDay(et,bt);
        System.out.println(resultAge);
    }
}


時間處理工具類

package com.wanggs.utils;

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

/**
 * 日期處理工具,線程安全
 */
public class DateUtils {
    private static Map<String, ThreadLocal<DateFormat>> thredlocalmap = new Hashtable<String, ThreadLocal<DateFormat>>();

    public static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
    public static final String yyyyMMdd = "yyyy-MM-dd";
    public static final String yyyyMM = "yyyy-MM";
    public static final String yyyy = "yyyy";
    public static final String HHmmss = "HH:mm:ss";
    public static final String MM = "MM";
    public static final String week = "E";

    static {
        thredlocalmap.put(yyyyMMddHHmmss,  new ThreadLocal<DateFormat>());
        thredlocalmap.put(yyyyMMdd,  new ThreadLocal<DateFormat>());
        thredlocalmap.put(yyyyMM,  new ThreadLocal<DateFormat>());
        thredlocalmap.put(yyyy,  new ThreadLocal<DateFormat>());
        thredlocalmap.put(HHmmss,  new ThreadLocal<DateFormat>());
        thredlocalmap.put(MM,  new ThreadLocal<DateFormat>());
        thredlocalmap.put(week,  new ThreadLocal<DateFormat>());
    }

    /**
     * 通過格式獲取格式化對象,線程安全
     *
     * @param datePattern
     * @return
     */
    public static DateFormat getDateFormat(String datePattern) {
        ThreadLocal<DateFormat> threadlocal = getThreadLocal(datePattern);
        DateFormat fmt = threadlocal.get();
        if (fmt == null) {
            fmt = new SimpleDateFormat(datePattern);
            threadlocal.set(fmt);
        }
        return fmt;
    }

    private static ThreadLocal<DateFormat> getThreadLocal(String datePattern) {
        ThreadLocal<DateFormat> theadlocal = thredlocalmap.get(datePattern);
        if(theadlocal == null) {
            theadlocal = new ThreadLocal<DateFormat>();
            thredlocalmap.put(datePattern, theadlocal);
        }
        return theadlocal;
    }

    /**
     * 將字符串日期轉(zhuǎn)換成Date對象
     *
     * @param dateStr 日期字符串
     * @param datePattern 日期格式
     * @return
     */
    public static Date parse(String dateStr, String datePattern) {
        try {
            return getDateFormat(datePattern).parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 將Date對象轉(zhuǎn)換成字符串日期
     *
     * @param date 日期對象
     * @param datePattern 日期格式
     * @return
     */
    public static String format(Date date, String datePattern) {
        return getDateFormat(datePattern).format(date);
    }

    /**
     * 取得特定時間對應的字符串,格式化為yyyy-MM-dd HH:mm:ss
     *
     * @param date 日期對象
     * @return
     */
    public static String ymdhmsFormat(Date date) {
        return format(date, yyyyMMddHHmmss);
    }

    /**
     * 取得特定時間對應的字符串,格式化為yyyy-MM-dd
     *
     * @param date
     * @return
     */
    public static String ymdFormat(Date date) {
        return format(date, yyyyMMdd);
    }

    /**
     * 根據(jù)當前日期,得到當前年月
     *
     * @param date
     * @return str
     */
    public static final String ymFormat(Date date) {
        if (date == null)
            return "";
        return format(date, yyyyMM);
    }

    /**
     * 根據(jù)當前日期,得到當前年份
     *
     * @param date
     * @return str
     */
    public static final String yFormat(Date date) {
        if (date == null)
            return "";
        return format(date, yyyy);
    }

    /**
     * 根據(jù)當前日期,得到當前月份
     *
     * @param date
     * @return str
     */
    public static final String mFormat(Date date) {
        if (date == null)
            return "";
        return format(date, MM);
    }

    /**
     * 返回當前的時間梁呈,格式為H:mm:ss
     *
     * @return 時間字符串
     */
    public static final String getTimeNow() {
        return format(new Date(), HHmmss);
    }

    /**
     * 把字符串形式轉(zhuǎn)換成日期形式,字符串的格式必須為yyyy-MM-dd
     *
     * @param ymdStringDate
     * @return date
     */
    public static final Date ymdString2Date(String ymdStringDate) {
        if (ymdStringDate == null)
            return null;
        return parse(ymdStringDate, yyyyMMdd);
    }

    /**
     * 把字符串形式轉(zhuǎn)換成日期形式,字符串的格式必須為yyyy-MM-dd HH:mm:ss
     *
     * @param ymdhmsStringDate
     * @return date
     */
    public static final Date ymdhmsString2Date(String ymdhmsStringDate) {
        if (ymdhmsStringDate == null)
            return null;
        return parse(ymdhmsStringDate, yyyyMMddHHmmss);
    }

    /**
     *
     * 得到當前時間,把日期后的時間歸0 變成(yyyy-MM-dd 00:00:00:000)
     *
     * @return date
     */
    public static Date getCurrentDate() {
        Date date = new Date();
        return zerolizedTime(date);
    }

    /**
     * 把日期后的時間歸0 變成(yyyy-MM-dd 00:00:00:000)
     *
     * @param fullDate
     * @return Date
     */
    public static final Date zerolizedTime(Date fullDate) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fullDate);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    /**
     * 得到兩個時間的間隔
     *
     * @param bDate
     * @param eDate
     * @return
     */
    static public long dateDiffByDay(Date bDate, Date eDate) {
        if (bDate == null || eDate == null)
            return 0L;
        return (bDate.getTime() - eDate.getTime()) / (1000 * 3600 * 24);
    }


    /**
     * 取得指定日期的星期數(shù)
     *
     * @return String
     */
    public static final String getWeek(Date date) {
        if (date == null)
            return null;
        return format(date, week);
    }

    /**
     * 判斷兩個日期字符串是否相等,格式必需為yyyy-MM-dd
     *
     * @param one
     *            第一個日期字符串
     * @param two
     *            第二個日期字符串
     * @return Boolean
     */
    public static final boolean  isEqual(String one, String two) {
        return ymdString2Date(one).equals(ymdString2Date(two));
    }

    /**
     * 判斷兩個日期字符串是否相等
     *
     * @param one
     *            第一個日期字符串
     * @param two
     *            第二個日期字符串
     * @param datePattern
     *            包含日期格式的字符串
     * @return Boolean
     */
    public static final boolean  isEqual(String one, String two, String datePattern) {

        return isEqual(one, two, datePattern, datePattern);
    }

    /**
     * 判斷兩個日期字符串是否相等
     *
     * @param one
     *            第一個日期字符串
     * @param two
     *            第二個日期字符串
     * @param datePatternOne
     *            對應第一個日期字符串的包含日期格式的字符串
     * @param datePatternTwo
     *            對應第二個日期字符串的包含日期格式的字符串
     * @return Boolean
     */
    public static final Boolean isEqual(String one, String two,
                                        String datePatternOne, String datePatternTwo) {

        return parse(one, datePatternOne).equals(parse(two, datePatternTwo));
    }

    /**
     * 返回兩時間的時間間隔(以分計算)
     *
     * @param date1
     * @param date2
     * @return
     */
    static public long spaceMinute(Date date1, Date date2) {
        Long num1 = date1.getTime();
        Long num2 = date2.getTime();
        Long space = (num2 - num1) / (1000 * 60);
        return space;
    }

    /**
     * 返回兩時間的時間間隔(以天計算)
     *
     * @paramtime1
     * @paramtime2
     * @return
     */
    static public Long spaceDay(Date date1, Date date2) {
        Long num1 = date1.getTime();
        Long num2 = date2.getTime();
        Long space = (num2 - num1) / (1000 * 3600 * 24);
        return space;
    }

    static public Date getDateAfterDay(Date somedate, int day) {
        if (somedate == null)
            return null;
        Calendar cal = Calendar.getInstance();
        cal.setTime(somedate);
        cal.add(Calendar.DAY_OF_MONTH, day);
        return new Date(cal.getTime().getTime());
    }

    static public Date getDateAfterDay(int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DAY_OF_MONTH, day);
        return cal.getTime();
    }

    static public Date getTSAfterDay(Date somedate, int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(somedate);
        cal.add(Calendar.DAY_OF_MONTH, day);
        return cal.getTime();
    }

    // 取得本月第一天時間
    static public Date getFirstDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime();
    }

}

時間工具類


package com.toltech.springboot.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


/**
 * 日期工具類,提供時間轉(zhuǎn)換雷绢、比較振亮、格式化等各種常用方法
 * @modificationHistory.  
 * <ul>
 * <li>gaozhanglei 2010-8-27下午04:06:10 TODO</li>
 * <li>
 * sunju 2012-7-31 下午03:06:05 新增getDate方法抄瑟,
 * 修改getNowDate方法以及其它幾個使用了toLocaleString()的方法如绸,解決Linux下時間錯誤問題
 * </li>
 * </ul>
 */

public class DateUtil {
    private static Logger LOG = LoggerFactory.getLogger(DateUtil.class);
    /**
     * 時間間隔:日
     */
    public final static int DATE_INTERVAL_DAY = 1;
    /**
     * 時間間隔:周
     */
    public final static int DATE_INTERVAL_WEEK = 2;
    /**
     * 時間間隔:月
     */
    public final static int DATE_INTERVAL_MONTH = 3;
    /**
     * 時間間隔:年
     */
    public final static int DATE_INTERVAL_YEAR = 4;
    /**
     * 時間間隔:小時
     */
    public final static int DATE_INTERVAL_HOUR = 5;
    /**
     * 時間間隔:分鐘
     */
    public final static int DATE_INTERVAL_MINUTE = 6;
    /**
     * 時間間隔:秒
     */
    public final static int DATE_INTERVAL_SECOND = 7;
    /**
     * 時間格式:年月日
     */
    public final static String DATE_FORMAT_MDY = "MM/dd/yyyy";
    public final static String DATE_FORMAT_YMD = "yyyy-MM-dd";
    public final static String DATE_FORMAT_YMD_ZH = "yyyy年MM月 ";
    public final static String DATE_FORMAT_YMDHMS_ZH = "yyyy年MM月dd日 ";
    public final static String DATE_FORMATE_YM="yyyyMM";
    public final static String DATE_FORMATE_LC="yy年MM月";
    public final static String DATE_FORMAT_MD="MM-dd";
    public final static String DATE_FORMAT_YMD_NL="yyyyMMdd";
    /**
     * 時間格式:年月日時分秒
     */
    public final static String DATE_FORMAT_YMDHMS = "yyyy-MM-dd HH:mm:ss";
    public final static String DATE_FORMATE_LX_YMDHMS = "yyyyMMddHHmmss";
    public static final String DATE_FORMATE_LX_YMDHMSS = "mmss";
    
    /**
     * 獲得時間
     * @author sunju
     * @creationDate. 2012-7-31 下午03:06:05 
     * @param date 時間
     * @param dateFormat 時間格式
     * @return 時間
     */
    public static Date getDate(Date date, String dateFormat) {
        return parseDate(dateFormat(date, dateFormat), dateFormat);
    }
    /**
     * 獲得當前日期(年月日)
     * @author sunju
     * @creationDate. 2010-8-27 下午05:11:23
     * @return 當前時間(yyyy-MM-dd)
     */
    public static Date getNowDate() {
        return parseDate(dateFormat(new Date(), DATE_FORMAT_YMD), DATE_FORMAT_YMD);
    }
    /**
     * 獲取當前時間字符串(年月日)
     * @author sunju
     * @creationDate. 2011-5-4 下午08:22:34 
     * @return 時間字符串
     */
    public static String getNowStringDate() {
        return dateFormat(new Date(), DATE_FORMAT_YMD);
    }
    /**
     * 獲得當前時間(年月日時分秒)
     * @author sunju
     * @creationDate. 2010-8-27 下午05:12:57
     * @return 當前時間(yyyy-MM-dd HH:mm:ss)
     */
    public static Date getNowTime() {
        return parseDate(dateFormat(new Date(), DATE_FORMAT_YMDHMS), DATE_FORMAT_YMDHMS);
    }
    /**
     * 獲取當前時間字符串(年月日時分秒)
     * @author sunju
     * @creationDate. 2014-3-10 下午03:16:42 
     * @return 時間字符串
     */
    public static String getNowStringTime() {
         return dateFormat(new Date(), DATE_FORMAT_YMDHMS);
    }
    /**
     * 獲得明天的日期字符串(格式年月日)
     * @author sunju
     * @creationDate. 2011-5-4 下午08:19:28 
     * @return 明天的日期
     */
    public static String getTomorrowStringDate() {
        return dateFormat(getTomorrowTime(), DATE_FORMAT_YMD);
    }
    /**
     * 獲得明天的日期(年月日)
     * @author sunju
     * @creationDate. 2011-5-4 下午08:19:57 
     * @return 明天的日期
     */
    public static Date getTomorrowDate() {
        return dateAdd(DATE_INTERVAL_DAY, getNowDate(), 1);
    }
    /**
     * 獲得明天的時間(年月日時分秒)
     * @author sunju
     * @creationDate. 2011-5-4 下午08:20:19 
     * @return 明天的時間
     */
    public static Date getTomorrowTime() {
        return dateAdd(DATE_INTERVAL_DAY, getNowTime(), 1);
    }
    /**
     * 獲得昨天的日期
     * @author sunju
     * @creationDate. 2013-10-22 下午03:54:48 
     * @return 昨天的日期
     */
    public static Date getYesterdayDate() {
        return dateAdd(DATE_INTERVAL_DAY, getNowDate(), -1);
    }
    /**
     * 獲得昨天的時間(年月日時分秒)
     * @author sunju
     * @creationDate. 2013-10-22 下午03:54:48 
     * @return 昨天的日期
     */
    public static Date getYseterdayTime(){
        return dateAdd(DATE_INTERVAL_DAY, getNowTime(), -1);
    }
    /**
     * 獲取當月第一天   
     * @author sunju
     * @creationDate. 2013-10-22 下午03:45:53 
     * @return 日期
     */
    public static Date getMonthFirst() {
        Calendar lastDate = Calendar.getInstance();
        lastDate.set(Calendar.DATE, 1); // 設為當前月的1號
        return getDate(lastDate.getTime(), DATE_FORMAT_YMD);
    }
    /**
     * 獲得下個月第一天的日期
     * @author sunju
     * @creationDate. 2013-10-22 下午03:52:38 
     * @return 日期
     */
    public static Date getNextMonthFirst() {
        Calendar lastDate = Calendar.getInstance();
        lastDate.add(Calendar.MONTH, 1); // 加一個月
        lastDate.set(Calendar.DATE, 1);  // 把日期設置為當月第一天
        return getDate(lastDate.getTime(), DATE_FORMAT_YMD);
    }
    
    public static Date getMonthStartTime(Date date, int monthDiff){
        Calendar calendar = GregorianCalendar.getInstance();
        if(date != null){
            calendar.setTime(date);
        }else{
            calendar.setTimeInMillis(System.currentTimeMillis());
        }
        if(monthDiff != 0){
            calendar.add(Calendar.MONTH, monthDiff);
        }
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        Date resultDate = calendar.getTime();
        return resultDate;
    }
    
    public static Date getMonthEndTime(Date date, int monthDiff){
        Calendar calendar = GregorianCalendar.getInstance();
        if(date != null){
            calendar.setTime(date);
        }else{
            calendar.setTimeInMillis(System.currentTimeMillis());
        }
        if(monthDiff != 0){
            calendar.add(Calendar.MONTH, monthDiff);
        }
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        Date resultDate = calendar.getTime();
        return resultDate;
    }
    
    /**
     * 取得當前星期幾
     * @author sunju
     * @creationDate. 2010-9-20 下午05:34:36 
     * @param date 時間
     * @return 星期
     */
    public static String getWeekOfDate(Date date) {
        if (date == null) {
            return null;
        }
        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; 
        Calendar cal = Calendar.getInstance(); 
        cal.setTime(date); 
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1; 
        if (w < 0) {
            w = 0;
        }
        return weekDays[w]; 
    }
    /**
     * 時間類型轉(zhuǎn)換返回字符串
     * @author sunju
     * @creationDate. 2010-8-27 下午05:18:37
     * @param date 時間
     * @param dateFormat 時間格式
     * @return 轉(zhuǎn)換后的時間字符串
     */
    public static String dateFormat(Date date, String dateFormat) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat format = new SimpleDateFormat(dateFormat);
        return format.format(date);
    }
    /**
     * 字符串時間類型轉(zhuǎn)換返回Date類型
     * @author sunju
     * @creationDate. 2010-8-27 下午05:23:35
     * @param date 字符串時間
     * @param dateFormat 時間格式
     * @return 轉(zhuǎn)換后的時間
     */
    public static Date parseDate(String date, String dateFormat) {
        if (StringUtils.isEmpty(date)) {
            return null;
        }
        SimpleDateFormat format = new SimpleDateFormat(dateFormat);
        try {
            return format.parse(date);
        } catch (Exception e) {
            LOG.error(e.getMessage());
            return null;
        }
    }
    
    public static Date getDateStartTime(Date date){
        Calendar calendar = GregorianCalendar.getInstance();
        if(date != null){
            calendar.setTime(date);
        }else{
            calendar.setTimeInMillis(System.currentTimeMillis());
        }
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        Date resultDate = calendar.getTime();
        return resultDate;
    }
    
    public static Date getDateEndTime(Date date){
        Calendar calendar = GregorianCalendar.getInstance();
        if(date != null){
            calendar.setTime(date);
        }else{
            calendar.setTimeInMillis(System.currentTimeMillis());
        }
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        Date resultDate = calendar.getTime();
        return resultDate;
    }
    
    /**
     * 加時間
     * @author sunju
     * @creationDate. 2010-8-27 下午05:28:06
     * @param interval 增加項黍匾,可以是天數(shù)赘来、月份现喳、年數(shù)、時間犬辰、分鐘嗦篱、秒
     * @param date 時間
     * @param num 加的數(shù)目
     * @return 時間加后的時間
     */
    public static Date dateAdd(int interval, Date date, int num) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();  
        calendar.setTime(date);
        switch (interval) {
        case DATE_INTERVAL_DAY:
            calendar.add(Calendar.DATE, num);
            break;
        case DATE_INTERVAL_WEEK:
            calendar.add(Calendar.WEEK_OF_MONTH, num);
            break;
        case DATE_INTERVAL_MONTH:
            calendar.add(Calendar.MONTH, num);
            break;
        case DATE_INTERVAL_YEAR:
            calendar.add(Calendar.YEAR, num);
            break;
        case DATE_INTERVAL_HOUR:
            calendar.add(Calendar.HOUR, num);
            break;
        case DATE_INTERVAL_MINUTE:
            calendar.add(Calendar.MINUTE, num);
            break;
        case DATE_INTERVAL_SECOND:
            calendar.add(Calendar.SECOND, num);
            break;
        default:
        }
        return calendar.getTime();
    }
    /**
     * 兩個時間時間差[前面時間和比較時間比,小于比較時間返回負數(shù)]
     * @author sunju
     * @creationDate. 2010-8-27 下午05:26:13
     * @param interval 比較項,可以是天數(shù)幌缝、月份灸促、年數(shù)、時間涵卵、分鐘浴栽、秒
     * @param date 時間
     * @param compare 比較的時間
     * @return 時間差(保留兩位小數(shù)點,小數(shù)點以后兩位四舍五入)
     */
    public static double getDateDiff(int interval, Date date, Date compare) {
        if (date == null || compare == null) {
            return 0;
        }
        double result = 0;
        double time = 0;
        Calendar calendar = null;
        switch (interval) {
        case DATE_INTERVAL_DAY:
            time = date.getTime() - compare.getTime();
            result = time / 1000d / 60d / 60d / 24d;
            break;
        case DATE_INTERVAL_HOUR:
            time = date.getTime() - compare.getTime();
            result = time / 1000d / 60d / 60d;
            break;
        case DATE_INTERVAL_MINUTE:
            time = date.getTime() / 1000d / 60d;
            result = time - compare.getTime() / 1000d / 60d;
            break;
        case DATE_INTERVAL_MONTH:
            calendar = Calendar.getInstance();
            calendar.setTime(date);
            time = calendar.get(Calendar.YEAR) * 12d;
            calendar.setTime(compare);
            time -= calendar.get(Calendar.YEAR) * 12d;
            calendar.setTime(date);
            time += calendar.get(Calendar.MONTH);
            calendar.setTime(compare);
            result = time - calendar.get(Calendar.MONTH);
            break;
        case DATE_INTERVAL_SECOND:
            time = date.getTime() - compare.getTime();
            result = time / 1000d;
            break;
        case DATE_INTERVAL_WEEK:
            calendar = Calendar.getInstance();
            calendar.setTime(date);
            time = calendar.get(Calendar.YEAR) * 52d;
            calendar.setTime(compare);
            time -= calendar.get(Calendar.YEAR) * 52d;
            calendar.setTime(date);
            time += calendar.get(Calendar.WEEK_OF_YEAR);
            calendar.setTime(compare);
            result = time - calendar.get(Calendar.WEEK_OF_YEAR);
            break;
        case DATE_INTERVAL_YEAR:
            calendar = Calendar.getInstance();
            calendar.setTime(date);
            time = calendar.get(Calendar.YEAR);
            calendar.setTime(compare);
            result = time - (double)calendar.get(Calendar.YEAR);
            break;
        default:
            break;
        }
        return new BigDecimal(result).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    /**
     * 獲取時間差[前面時間和比較時間比,小于比較時間返回負數(shù)]
     * @author sunju
     * @creationDate. 2010-9-1 下午04:36:07 
     * @param level 返回時間等級(1:返回天;2:返回天-小時;3:返回天-小時-分4:返回天-小時-分-秒;)
     * @param date 時間
     * @param compare 比較的時間
     * @return 時間差(保留兩位小數(shù)點,小數(shù)點以后兩位四舍五入)
     */
    public static String getDateBetween(Integer level, Date date, Date compare) {
        if (date == null || compare == null) {
            return null;
        }
        long s = new BigDecimal(getDateDiff(DATE_INTERVAL_SECOND, date, compare)).setScale(2, BigDecimal.ROUND_HALF_UP).longValue();
        int ss = 1;
        int mi = ss * 60;
        int hh = mi * 60;
        int dd = hh * 24;
       
        long day = s / dd;
        long hour = (s - day * dd) / hh;
        long minute = (s - day * dd - hour * hh) / mi;
        long second = (s - day * dd - hour * hh - minute * mi) / ss;
        String flag =(day < 0 || hour < 0 || minute < 0 || second < 0) ? "-" : "";
        day = Math.abs(day);
        hour = Math.abs(hour);
        minute = Math.abs(minute);
        second = Math.abs(second);
        StringBuilder result = new StringBuilder(flag);
        switch (level) {
        case 1:
            if (day != 0) {
                result.append(day).append("天");
            }
            break;
        case 2:
            if (day != 0) {
                result.append(day).append("天");
            }
            if (hour != 0) {
                result.append(hour).append("小時");
            }
            break;
        case 3:
            if (day != 0) {
                result.append(day).append("天");
            }
            if (hour != 0) {
                result.append(hour).append("小時");
            }
            if (minute != 0) {
                result.append(minute).append("分");
            }
            break;
        case 4:
            if (day != 0) {
                result.append(day).append("天");
            }
            if (hour != 0) {
                result.append(hour).append("小時");
            }
            if (minute != 0) {
                result.append(minute).append("分");
            }
            if (second != 0) {
                result.append(second).append("秒");
            }
            break;
        default:
            break; 
        }
        return result.toString();
    }
    /**
     * 時間是否是今天
     * @author sunju
     * @creationDate. 2011-5-4 下午08:24:58 
     * @param date 時間
     * @return 布爾
     */
    public static boolean isToday(Date date) {
        if (date == null) return false;
        return getNowStringDate().equals(dateFormat(date, DATE_FORMAT_YMD));
    }
    /**
     * 時間是否合法
     * @author sunju
     * @creationDate. 2012-6-19 下午01:07:59 
     * @param date 時間
     * @param dateFormat 時間格式
     * @return
     */
    public static boolean isValidDate(String date, String dateFormat) {
        try {
            new SimpleDateFormat(dateFormat).parse(date);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
    /**
     * 
     * 是否大于現(xiàn)在的時間  
     * true 大于
     * <ul>
     * <li>
     * <b>原因:<br/>
     * <p>
     * [2014-8-27]gaozhanglei<br/>
     * @param date
     * @param dateFormate
     * @return
     * TODO
     * </p>
     * </li>
     * </ul>
     */
    public static boolean isgtnow(String date,String dateFormate) {
          boolean flag=false;
        try {
            Date nowdt=new Date();
            Date  compt=DateUtil.parseDate(date, dateFormate);
            long nowtm=nowdt.getTime();
            long comptm=compt.getTime();
            if(comptm > nowtm) {
                flag=true;
            }
        }catch (Exception e) {
            flag=false;
        }
        
        return flag;
    }
    /**   
     * 得到本月的最后一天   
     *    
     * @return   
     */    
    public static String getMonthLastDay() {     
        Calendar calendar = Calendar.getInstance();     
        calendar.set(Calendar.DAY_OF_MONTH, calendar     
                .getActualMaximum(Calendar.DAY_OF_MONTH));     
        return dateFormat(calendar.getTime(),DATE_FORMAT_YMD);     
    }
    
    /**
     * 獲取時間在當月的天數(shù)
     * @param date
     * @return
     */
    public static int getDayOfMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    
    public static int getMaxDayOfMonth(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    }
    
    //當前時間轉(zhuǎn)時間戳
    public static String timeStamp(){
        SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_YMDHMS);
        String time="1970-01-06 11:45:55";  
        String date =null;
        try {
             date = format.parse(time).toString();
        } catch (ParseException e) {
        }  
        return date;
    }
    
    /**
     * 計算產(chǎn)品到期時間
     * @param productCycle   產(chǎn)品包周期值
     * @return   產(chǎn)品包到期時間
     */
    public static Date getDueTime(String productCycle){
        Date payTime = new Date(); //付費成功時間
        Calendar calendar = Calendar.getInstance();  
        calendar.setTime(payTime);
        switch (productCycle) {
        case "0":    // 包年
            calendar.add(Calendar.MONTH, 13);
            break;
        case "1":       //包半年
            calendar.add(Calendar.MONTH, 7);
            break;
        case "2":       //包季
            calendar.add(Calendar.MONTH, 4);
            break;
        case "3":       //包月
            calendar.add(Calendar.MONTH, 1);
            break;
        case "4":       //包天
            calendar.add(Calendar.DATE, 1);
            break;
        case "5":       //單點
            calendar.add(Calendar.MONTH, 1);
            break;
         default:   
            break;
        }
        return calendar.getTime();
    }
    /***
     * 用戶產(chǎn)品包實際不可看時間(用于產(chǎn)品通知)
     * @param productCycle
     * @return
     */
    public static Date getActualDueTime(String productCycle){
        Date payTime = new Date(); //付費成功時間
        Calendar calendar = Calendar.getInstance();  
        calendar.setTime(payTime);
        switch (productCycle) {
        case "0":    // 包年
            calendar.add(Calendar.MONTH, 13);
            break;
        case "1":       //包半年
            calendar.add(Calendar.MONTH, 7);
            break;
        case "2":       //包季
            calendar.add(Calendar.MONTH, 4);
            break;
        case "3":       //包月
            calendar.add(Calendar.MONTH, 1);
            break;
        case "4":       //包天
            calendar.add(Calendar.DATE, 1);
            break;
        case "5":       //單點
            calendar.add(Calendar.MONTH, 1);
            break;
         default:   
            break;
        }
        return calendar.getTime();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市轿偎,隨后出現(xiàn)的幾起案子典鸡,更是在濱河造成了極大的恐慌,老刑警劉巖坏晦,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝玷,死亡現(xiàn)場離奇詭異,居然都是意外死亡昆婿,警方通過查閱死者的電腦和手機球碉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仓蛆,“玉大人睁冬,你說我怎么就攤上這事】锤恚” “怎么了痴突?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵搂蜓,是天一觀的道長。 經(jīng)常有香客問我辽装,道長,這世上最難降的妖魔是什么拾积? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任殉挽,我火速辦了婚禮,結(jié)果婚禮上拓巧,老公的妹妹穿的比我還像新娘斯碌。我一直安慰自己,他們只是感情好肛度,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布傻唾。 她就那樣靜靜地躺著,像睡著了一般承耿。 火紅的嫁衣襯著肌膚如雪冠骄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天加袋,我揣著相機與錄音凛辣,去河邊找鬼。 笑死职烧,一個胖子當著我的面吹牛扁誓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚀之,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蝗敢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了足删?” 一聲冷哼從身側(cè)響起前普,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壹堰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骡湖,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡贱纠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了响蕴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆焊。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浦夷,靈堂內(nèi)的尸體忽然破棺而出辖试,到底是詐尸還是另有隱情辜王,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布罐孝,位于F島的核電站呐馆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏莲兢。R本人自食惡果不足惜汹来,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望改艇。 院中可真熱鬧收班,春花似錦、人聲如沸谒兄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽承疲。三九已至邻耕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纪隙,已是汗流浹背赊豌。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绵咱,地道東北人碘饼。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像悲伶,于是被迫代替她去往敵國和親艾恼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評論 25 707
  • 1. Java基礎部分 基礎部分的順序:基本語法麸锉,類相關(guān)的語法钠绍,內(nèi)部類的語法,繼承相關(guān)的語法花沉,異常的語法柳爽,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)碱屁,斷路器磷脯,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 入夜 深圳的風在屋外漂泊 氣溫開始冷骨 想出門隨便走走 找一找看有沒有 有沒有一幕畫面 恰好來把這個城市的今夜描摹...
    寫一個世界的閱讀 206評論 0 0
  • 小孩愣愣地坐在化妝桌前,有一下沒一下晃著腿娩脾。熟悉他的化妝師一下就明白了他又在出神赵誓,直接夾起他有些厚重的劉海,“龍?zhí)?..
    歐洲之光光光光光閱讀 159評論 0 0