获取指定时间

package com.founder.util;

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

import org.apache.commons.lang.StringUtils;
import org.jfree.util.Log;

public class DateFunction {
    public static SimpleDateFormat fmt               = new SimpleDateFormat();

    public static final long       MILLIS_PER_MINUTE = 60 * 1000;
    public static final long       MILLIS_PER_HOUR   = 60 * MILLIS_PER_MINUTE;
    public static final long       MILLIS_PER_DAY    = 24 * MILLIS_PER_HOUR;

    /**
     * 获取给定时间date的前day天
     * 
     * @param date
     * @param day
     * @return
     */
    public static Date getDateBeforeDay(Date date, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -day);
        Date _date = calendar.getTime();
        return _date;
    }

    /**
     * 获取给定时间后day天
     * @author: qin.jian
     * 2014-2-13 下午2:15:17
     * @param date
     * @param day
     * @return 
     * Date
     * each engineer has a duty to keep the code elegant
     */
    public static Date getDateAfterDay(Date date, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, day);
        Date _date = calendar.getTime();
        return _date;
    }

    /**
     * 获取给定时间后day天
     * @author: qin.jian
     * 2014-2-13 下午2:15:17
     * @param date
     * @param day
     * @return 
     * Date
     * each engineer has a duty to keep the code elegant
     */
    public static Date getDateAfterHours(Date date, int hours) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, hours);
        Date _date = calendar.getTime();
        return _date;
    }

    /**
     * 获取指定时间的日期
     * @author: slzs
     * 2013-12-25 下午4:38:51
     * @param hour 时
     * @param minute 分
     * @param second 秒
     * @return Date
     * each engineer has a duty to keep the code elegant
     */
    public static Date getDateSetTime(int hour, int minute, int second) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        Date date = calendar.getTime();
        return date;
    }

    /**
     * 获取指定格式时间字符串
     * @author: slzs
     * 2013-12-18 下午3:30:06
     * @param pattern 自定义格式 yyyy-MM-dd HH:mm:ss
     * @param date Date类型日期
     * @return String 字符串格式日期
     * each engineer has a duty to keep the code elegant
     */
    public static String getStrDateFormat(String pattern, Date date) {
        SimpleDateFormat fmt = new SimpleDateFormat();
        fmt.applyPattern(pattern);
        String dateStr = fmt.format(date);
        return dateStr;
    }

    /**
     * 获取指定格式时间字符串
     * @author: slzs
     * 2013-12-18 下午3:30:06
     * @param pattern 自定义格式 yyyy-MM-dd HH:mm:ss
     * @param dateStr String 日期格式字符
     * @return Date类型日期
     * each engineer has a duty to keep the code elegant
     * @throws ParseException 
     */
    public static Date getDateFormat(String pattern, String dateStr) throws ParseException {
        SimpleDateFormat fmt = new SimpleDateFormat();
        if (pattern == null && dateStr != null) {
            if (dateStr.length() == 19) {
                fmt.applyPattern("yyyy-MM-dd HH:mm:ss");
            } else if (dateStr.length() == 16) {
                fmt.applyPattern("yyyy-MM-dd HH:mm");
            } else if (dateStr.length() == 13) {
                fmt.applyPattern("yyyy-MM-dd HH");
            } else {
                fmt.applyPattern("yyyy-MM-dd");
            }
        } else {
            fmt.applyPattern(pattern);
        }
        Date date = fmt.parse(dateStr);
        return date;
    }

    /**
     * 获取系统日期字符串
     * @author: slzs
     * 2013-12-18 下午3:31:04
     * @param pattern
     * @return String
     * each engineer has a duty to keep the code elegant
     */
    public static String getStrDateFormat(String pattern) {
        return getStrDateFormat(pattern, new Date());
    }

    /**
     * 获取param月前/后的日期
     * @author: slzs
     * 2013-12-18 下午3:53:26
     * @param date 基准日期
     * @param month 传正数/负数加减月数
     * @return Date
     * each engineer has a duty to keep the code elegant
     */
    public static Date getDateByMonth(Date date, int month) {
        Calendar caldate = Calendar.getInstance();
        caldate.add(Calendar.MONTH, month);
        return caldate.getTime();
    }

    /**
     * 获取基准日期若干天前的日期
     * 
     * @param curDate
     *            String 基准日期
     * @param days
     *            int 需要获取基准日期几天前的日期
     * @return String
     */
    public synchronized static String getBeforeDay(String curDate, int days) {
        String oldDate = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat();
            if (curDate.length() == 19) {
                fmt.applyPattern("yyyy-MM-dd HH:mm:ss");
            } else if (curDate.length() == 16) {
                fmt.applyPattern("yyyy-MM-dd HH:mm");
            } else if (curDate.length() == 13) {
                fmt.applyPattern("yyyy-MM-dd HH");
            } else {
                fmt.applyPattern("yyyy-MM-dd");
            }

            Calendar caldate = Calendar.getInstance();
            Date date = fmt.parse(curDate);
            caldate.setTimeInMillis(date.getTime());
            caldate.add(Calendar.DATE, 0 - days);
            /*
             * oldDate = caldate.get(Calendar.YEAR) + "-" +
             * (caldate.get(Calendar.MONTH) + 1) + "-" +
             * caldate.get(Calendar.DAY_OF_MONTH);
             */
            oldDate = fmt.format(caldate.getTime());
        } catch (Exception e) {
            return curDate;
        }
        return oldDate;
    }

    /**
     * 对给定的时间值转为全文检索语法的时间, 如将2006-05-02 12:12:12 转为全文检索语法的时间 20060502121212
     * 
     * @param strDate
     *            String
     * @return String
     */
    public static String getContentTimeNoSec(String strDate) {
        if (strDate == null || "null".equals(strDate)) {
            return ("null");
        }
        String strContent = strDate;
        strContent = strContent.replaceAll(" ", "");
        strContent = strContent.replaceAll("-", "");
        strContent = strContent.replaceAll(":", "");

        if (strContent.length() == 8) {
            strContent = strContent + "0000";
        } else if (strContent.length() == 12) {
            strContent = strContent + "00";
        }
        return (strContent);
    }
    

    /**
     * 以全文检索时间串形式返回给定时间若干小时前的时间
     * 
     * @param curDate
     *            String
     * @param hours
     *            int
     * @return String
     */
    public static String getYMDBeforeHour(String curDate, int hours) {
        String oldtime = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat();
            fmt.applyPattern("yyyy-MM-dd HH:mm:ss");
            Calendar caldate = new GregorianCalendar();
            Date date = fmt.parse(curDate);
            caldate.setTimeInMillis(date.getTime());

            caldate.add(Calendar.HOUR_OF_DAY, 0 - hours);
            fmt.applyPattern("yyyyMMddHHmmss");
            oldtime = fmt.format(caldate.getTime());
        } catch (Exception e) {

        }
        return oldtime;
    }

    /**
     * 以全文检索时间串形式返回给定时间若干秒之前的时间
     * @author wwwang
     * @param curDate String
     * @param seconds  int
     * @return String
     */
    public static String getYMDAfterSeconds(String curDate, int seconds) {
        String oldtime = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat();
            fmt.applyPattern("yyyyMMddHHmmss");
            Calendar caldate = new GregorianCalendar();
            Date date = fmt.parse(curDate);
            caldate.setTimeInMillis(date.getTime());
            caldate.add(Calendar.SECOND, seconds);
            fmt.applyPattern("yyyyMMddHHmmss");
            oldtime = fmt.format(caldate.getTime());
        } catch (Exception e) {
            Log.info(e);
        }
        return oldtime;
    }

    /**
     * 将给定的时间 转换成Format的样式  输出
     * @author: fanzd
     * Dec 21, 2013 10:36:11 AM
     * @param input
     * @param aStringFormat
     * @return 
     * String
     * each engineer has a duty to keep the code elegant
     */
    public static String getString(Date input, String aStringFormat) {
        String strReturn = "";
        if (input == null) {
            strReturn = "3000-1-1";
        } else {
            SimpleDateFormat fmt = new SimpleDateFormat();
            if (StringUtils.isBlank(aStringFormat)) {
                aStringFormat = "yyyy-MM-dd";
            }
            fmt.applyPattern(aStringFormat);
            strReturn = fmt.format(input.getTime());
        }
        return strReturn;
    }

    /**
     * 把多少天的数字转换成对应的日期格式 add by zhangdan 比如今天2001-01-01,1天前就是2000-12-31
     * 
     * @param strTime
     *            String 多少天的数字
     * @return String 2001-01-01
     */
    public static String getDBDateFromNum(String strNum) {
        String strDate = null;
        String strYear = null, strMonth = null, strDay = null;
        Calendar calendar = new GregorianCalendar();
        strDay = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(strDay) - Integer.parseInt(strNum));
        strYear = String.valueOf(calendar.get(Calendar.YEAR));
        strMonth = String.valueOf(calendar.get(Calendar.MONTH) + 1);
        strDay = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
        if (strMonth.length() == 1) {
            strMonth = "0" + strMonth;
        }
        if (strDay.length() == 1) {
            strDay = "0" + strDay;
        }
        strDate = strYear + "-" + strMonth + "-" + strDay;
        return strDate;
    }

    /**
     * 获取给定时间前N个小时
     * @author: qin.jian
     * 2014-2-13 下午2:15:17
     * @param date
     * @param day
     * @return 
     * Date
     * each engineer has a duty to keep the code elegant
     */
    public static Date getDateBeforeHours(Date date, int hours) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, -hours);
        Date _date = calendar.getTime();
        return _date;
    }

    /**
     * <p>
     * 返回系统时间组成的字符串。例如:20050828143158
     * <p>
     * 
     * @return String
     */
    public static String getYYYYMMDDHHMMSS() {
        Calendar c = Calendar.getInstance();
        int y, m, d, h, mi, s;
        String year, month, day, hour, minute, second;
        String returnValue = "";

        y = c.get(Calendar.YEAR);
        m = c.get(Calendar.MONTH) + 1;
        d = c.get(Calendar.DATE);
        h = c.get(Calendar.HOUR_OF_DAY);
        mi = c.get(Calendar.MINUTE);
        s = c.get(Calendar.SECOND);

        year = String.valueOf(y);

        if (m <= 9) {
            month = "0" + String.valueOf(m);
        } else {
            month = String.valueOf(m);

        }
        if (d <= 9) {
            day = "0" + String.valueOf(d);
        } else {
            day = String.valueOf(d);

        }
        if (h <= 9) {
            hour = "0" + String.valueOf(h);
        } else {
            hour = String.valueOf(h);

        }
        if (mi <= 9) {
            minute = "0" + String.valueOf(mi);
        } else {
            minute = String.valueOf(mi);

        }
        if (s <= 9) {
            second = "0" + String.valueOf(s);
        } else {
            second = String.valueOf(s);

        }
        returnValue = year + month + day + hour + minute + second;

        return returnValue;
    }

    /**
     * <p>
     * 返回系统时间组成的字符串。例如:20050828
     * <p>
     * 
     * @return String
     */
    public static String getYYYYMMDD() {
        Calendar c = Calendar.getInstance();
        int y, m, d;
        String year, month, day;
        String returnValue = "";

        y = c.get(Calendar.YEAR);
        m = c.get(Calendar.MONTH) + 1;
        d = c.get(Calendar.DATE);

        year = String.valueOf(y);

        if (m <= 9) {
            month = "0" + String.valueOf(m);
        } else {
            month = String.valueOf(m);

        }
        if (d <= 9) {
            day = "0" + String.valueOf(d);
        } else {
            day = String.valueOf(d);

        }
        returnValue = year + month + day;

        return returnValue;
    }

    /**
     * 对给定的全文检索时间值转为数据库的时间 如将20060502121212 转为数据库的时间 2006-05-02 12:12:12
     * 
     * @param strDate
     *            String
     * @return String
     */
    public static String getDBTime(String strTime) {
        String strDBTime = "";
        if (strTime == null || "null".equals(strTime)) {
            return ("null");
        }

        try {
            SimpleDateFormat fm = new SimpleDateFormat("yyyyMMddHHmmss");
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            if (strTime.length() == 10) {
                fm = new SimpleDateFormat("yyyyMMddHH");
                fmt = new SimpleDateFormat("yyyy-MM-dd HH");
            } else if (strTime.length() == 8) {
                fm = new SimpleDateFormat("yyyyMMdd");
                fmt = new SimpleDateFormat("yyyy-MM-dd");
            }

            Date date = fm.parse(strTime);
            strDBTime = fmt.format(date);
        } catch (Exception e) {

        }
        return (strDBTime);
    }

    /**
     * 对给定的时间值转为全文检索语法的时间,不补时分秒 如将2006-05-02转为全文检索语法的时间 20060502
     * 
     * @param strDate
     *            String
     * @return String
     */
    public static String transContentTime(String strDate) {
        if (strDate == null || "null".equals(strDate)) {
            return ("null");
        }
        String strContent = strDate;
        strContent = strContent.replaceAll(" ", "");
        strContent = strContent.replaceAll("-", "");
        strContent = strContent.replaceAll(":", "");
        return (strContent);
    }

    public static String getIssueBeforeHour(String curDate, int hours) {
        String oldtime = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHH");
            Calendar caldate = new GregorianCalendar();
            Date date = fmt.parse(curDate);
            caldate.setTimeInMillis(date.getTime());

            caldate.add(Calendar.HOUR_OF_DAY, 0 - hours);
            fmt = new SimpleDateFormat("yyyyMMddHH");
            oldtime = fmt.format(caldate.getTime());
        } catch (Exception e) {

        }
        return oldtime;
    }

    public static String getIssueBeforeDay(String curDate, int day) {
        String oldtime = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
            Calendar caldate = new GregorianCalendar();
            Date date = fmt.parse(curDate);
            caldate.setTimeInMillis(date.getTime());

            caldate.add(Calendar.DAY_OF_MONTH, -day);
            fmt = new SimpleDateFormat("yyyyMMdd");
            oldtime = fmt.format(caldate.getTime());
        } catch (Exception e) {

        }
        return oldtime;
    }

    /**
     * 以"yyyy-MM-dd HH:mm形式返回给定时间若干小时前的时间
     * 
     * @param curDate
     *            String
     * @param hours
     *            int
     * @return String
     */
    public static String getStrBeforeHour(String curDate, int hours) {
        String olddate = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");

            if (curDate.length() == 19) {
                fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            } else if (curDate.length() == 16) {
                fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            } else if (curDate.length() == 13) {
                fmt = new SimpleDateFormat("yyyy-MM-dd HH");
            }
            Calendar caldate = new GregorianCalendar();
            Date date = fmt.parse(curDate);
            caldate.setTimeInMillis(date.getTime());

            caldate.add(Calendar.HOUR_OF_DAY, 0 - hours);

            olddate = fmt.format(caldate.getTime());
        } catch (Exception e) {

        }
        return olddate;
    }

    /**
     * <p>
     * 返回系统时间组成的字符串。例如:2005-08-28 15:00
     * <p>
     * 
     * @return String
     */
    public static String getSystemHour() {
        Calendar c = Calendar.getInstance();
        String returnValue = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:00");
            returnValue = fmt.format(c.getTime());
        } catch (Exception e) {

        }
        return returnValue;
    }

    /**
     * <p>
     * 返回系统时间组成的字符串。例如:2005-08-28 15:00
     * <p>
     * 
     * @return String
     */
    public static String getSystemDay() {
        Calendar c = Calendar.getInstance();
        String returnValue = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
            returnValue = fmt.format(c.getTime());
        } catch (Exception e) {

        }
        return returnValue;
    }

    /**
     * 24小时记时法 将日期(Date)转换为字符串形式,默认转换为:"yyyy-MM-dd HH:mm:ss"
     * 
     * @param date
     * @return
     */
    public static String formatDateSting(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = sdf.format(date);
        return strDate;
    }

    /**
     * 计算两个日期间的相隔天数
     * 
     * @param date
     * @param refDate
     * @return
     */
    public static long getBetweenDays(Date date, Date refDate) {
        Date date1 = StringWrapper.parse(StringWrapper.format(date, StringWrapper.FORMATTER_SHORT), null);
        Date refDate1 = StringWrapper.parse(StringWrapper.format(refDate, StringWrapper.FORMATTER_SHORT), null);
        return ((refDate1.getTime() - date1.getTime()) / MILLIS_PER_DAY);
    }

    /**
     * 获取基准日期若干天后的日期
     * 
     * @param curDate
     *            String 基准日期
     * @param days
     *            int 需要获取基准日期几天后的日期
     * @return String
     */
    public static String getAfterDay(String curDate, int days) {
        String oldDate = "";
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");

            if (curDate.length() == 19) {
                fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            } else if (curDate.length() == 16) {
                fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            } else if (curDate.length() == 13) {
                fmt = new SimpleDateFormat("yyyy-MM-dd HH");
            }

            Calendar caldate = new GregorianCalendar();
            Date date = fmt.parse(curDate);
            caldate.setTimeInMillis(date.getTime());
            caldate.add(Calendar.DATE, days);
            oldDate = fmt.format(caldate.getTime());
        } catch (Exception e) {
            return curDate;
        }
        return oldDate;
    }

    /**
     * formatTime 格式化输出时间
     * 
     * @param aLongMillis
     *            long the number of milliseconds since January 1, 1970,
     *            00:00:00 GMT represented by this date.
     * @param aStringFormat
     *            格式
     * @return String
     */
    public static String formatTime(long aLongMillis, String aStringFormat) {
        String ret = "";

        try {
            Calendar caldate = new GregorianCalendar();
            caldate.setTimeInMillis(aLongMillis);
            SimpleDateFormat fmt = new SimpleDateFormat(aStringFormat);
            ret = fmt.format(caldate.getTime());

        } catch (Exception e) {

        }

        return ret;
    }

    /**
     * 将输入的字符串日期转换为Date形式
     * 
     * @param convertTime
     *            日期格式为: "yyyy-MM-dd"
     * @return Date
     */
    public static Date getDate(String convertTime) {
        Date returnValue = null;
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
            returnValue = fmt.parse(convertTime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return returnValue;
    }

    /**
     * 获取指定日期的0点0分0秒
     * 
     * @param date
     * @return
     */
    public static Date getZeroHour(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }
    
    /**
     * @author donggy
     * 获取指定日期的结束时间
     * @param date
     * @return
     */
    public static Date getZeroHour2(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }
    
    
    /**
     * 
     * 获取当前时间之前或之后几小时 hour
     * @param hour
     * @return
     */
    public static String getTimeByHour(int hour) {

        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + hour);

        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());

    }
    
  
    public static String getYesterdayTimeByHour(Date date,int hour) {
    	Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + hour);
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
    }
    
    public static void main(String[] args) {
        System.out.println(getYesterdayTimeByHour(getZeroHour(new Date()), 3));
    }
    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值