时间工具类

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public final class DateUtils {
    private static Log log = LogFactory.getLog(DateUtils.class);
    public final static String DATE_PATTERN = "yyyy-MM-dd";             // 日期格式
    public final static String TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";    // 时间格式
    public final static long ONEDAY_MS = 24 * 60 * 60 * 1000;           //一天毫秒数
    public final static String MAX_DATE = "9999-12-31";                 // 最大日期
    public final static String MAX_TIME = "9999-12-31 23:59:59";        // 最大时间




    /**
     * 得到系统格式化过的日期 参数为日期类型
     */
    public static final String getDateStr(Date aDate) {
        SimpleDateFormat df = null;
        String returnValue = "";

        if (aDate != null) {
            df = new SimpleDateFormat(DATE_PATTERN);
            returnValue = df.format(aDate);
        }

        return (returnValue);
    }

    /**
     * 得到年月日时分秒格式化过的日期 参数为日期类型
     */
    public static final String getTimeStr(Date aDate) {
        SimpleDateFormat df = null;
        String returnValue = "";

        if (aDate != null) {
            df = new SimpleDateFormat(TIME_PATTERN);
            returnValue = df.format(aDate);
        }

        return (returnValue);
    }

    /**
     * 得到当年第一天和最后一天
     */
    public static Map<String, Date> getStartendDateOfYear(Date date) {
        Date startTime = getFirstDayOfYear(date);
        Date endTime = getLastDayOfYear(date);
        Map<String, Date> dateMap = new HashMap<String, Date>();
        dateMap.put("startTime", startTime);
        dateMap.put("endTime", endTime);
        return dateMap;
    }

    /**
     * 得到当季度第一天和最后一天
     */
    public static Map<String, Date> getStartendDateOfQuarter(Date date) {
        Date startTime = getFirstDayOfQuarter(date);
        Date endTime = getLastDayOfQuarter(date);
        Map<String, Date> dateMap = new HashMap<String, Date>();
        dateMap.put("startTime", startTime);
        dateMap.put("endTime", endTime);
        return dateMap;
    }

    /**
     * 得到当月第一天和最后一天
     */
    public static Map<String, Date> getStartendDateOfMonth(Date date) {
        Date startTime = getFirstDayOfMonth(date);
        Date endTime = getLastDayOfMonth(date);
        Map<String, Date> dateMap = new HashMap<String, Date>();
        dateMap.put("startTime", startTime);
        dateMap.put("endTime", endTime);
        return dateMap;
    }

    /**
     * date非空返回指定日期的起始日期(yyyy-MM-dd 00:00:00)和结束日期(yyyy-MM-dd 23:59:59)
     */
    public static Map<String, Date> getStartendDateOfDay(Date date) {
        Date startTime = getDate0Clock(date);
        Date endTime = getDate24Clock(date);
        Map<String, Date> dateMap = new HashMap<String, Date>();
        dateMap.put("startTime", startTime);
        dateMap.put("endTime", endTime);
        return dateMap;
    }

    /**
     * 得到本年度第一天
     */
    public static Date getFirstDayOfYear(Date date) {
        Calendar cal = getCalendar(date);
        cal.set(Calendar.MONTH, Calendar.JANUARY);
        return getFirstDayOfMonth(cal);
    }

    /**
     * 得到本年度最后一天
     */
    public static Date getLastDayOfYear(Date date) {
        Calendar cal = getCalendar(date);
        cal.set(Calendar.MONTH, Calendar.DECEMBER);
        return getLastDayOfMonth(cal);
    }

    /**
     * 得到本季度第一天
     */
    public static Date getFirstDayOfQuarter(Date date)   {     
        Calendar cal = getCalendar(date);
        int mon = cal.get(Calendar.MONTH);

        if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {
            cal.set(Calendar.MONTH, Calendar.JANUARY);
        }
        if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {
            cal.set(Calendar.MONTH, Calendar.APRIL);
        }
        if (mon >= Calendar.JULY && mon <= Calendar.AUGUST) {
            cal.set(Calendar.MONTH, Calendar.JULY);
        }
        if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {
            cal.set(Calendar.MONTH, Calendar.OCTOBER);
        }

        return getFirstDayOfMonth(cal);  
    }  

    /**
     * 得到本季度最后一天
     */
    public static Date getLastDayOfQuarter(Date date) {
        Calendar cal = getCalendar(date);
        int mon = cal.get(Calendar.MONTH);

        if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {
            cal.set(Calendar.MONTH, Calendar.MARCH);
        }
        if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {
            cal.set(Calendar.MONTH, Calendar.JUNE);
        }
        if (mon >= Calendar.JULY && mon <= Calendar.AUGUST) {
            cal.set(Calendar.MONTH, Calendar.AUGUST);
        }
        if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {
            cal.set(Calendar.MONTH, Calendar.DECEMBER);
        }

        return getLastDayOfMonth(cal);
    }  

    /**
     * 得到本月第一天
     */
    public static Date getFirstDayOfMonth(Date date) {
        Calendar cal = getCalendar(date);
        return getFirstDayOfMonth(cal);
    }

    /**
     * 得到本月最后一天的日期
     */
    public static Date getLastDayOfMonth(Date date) {
        Calendar cal = getCalendar(date);
        return getLastDayOfMonth(cal);
    }

    /**
     * 得到本月第一天的日期
     */
    public static Date getFirstDayOfMonth(Calendar cal) {
        int minDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DAY_OF_MONTH, minDay);
        return getDate0Clock(cal.getTime());
    }

    /**
     * 得到本月最后一天的日期
     */
    public static Date getLastDayOfMonth(Calendar cal) {
        int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DAY_OF_MONTH, maxDay);
        return getDate24Clock(cal.getTime());
    }

    /**
     * 得到本周第一天
     */
    public static Date getFirstDayOfWeek(Date date) {
        Calendar cal = getCalendar(date);
        return getFirstDayOfWeek(cal);
    }

    /**
     * 得到本周最后一天
     * 
     * @param date
     * @return
     */
    public static Date getLastDayOfWeek(Date date) {
        Calendar cal = getCalendar(date);
        return getLastDayOfWeek(cal);
    }

    /**
     * 得到本周第一天
     */
    public static Date getFirstDayOfWeek(Calendar cal) {
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
        return getDate0Clock(cal.getTime());
    }

    /**
     * 得到本周最后一天
     */
    public static Date getLastDayOfWeek(Calendar cal) {
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + 6);
        return getDate24Clock(cal.getTime());
    }

    /**
     * date非空返回指定日期的零时零分零秒(yyyy-MM-dd 00:00:00)
     * date为null返回当前日期的零时零分零秒(yyyy-MM-dd 00:00:00)
     */
    public static Date getDate0Clock(Date date) {
        return getSpecDate(date, 0, 0, 0);
    }

    /**
     * date非空返回指定日期的零时零分零秒(yyyy-MM-dd 23:59:59)
     * date为null返回当前日期的零时零分零秒(yyyy-MM-dd 23:59:59)
     */
    public static Date getDate24Clock(Date date) {
        return getSpecDate(date, 23, 59, 59);
    }

    /**
     * 将字符串转为对应的日期
     */

    public static Date convertStringToDate(String strDate) {
        Date aDate = null;

        try {
            if (log.isDebugEnabled()) {
                log.debug("converting date with pattern: " + DATE_PATTERN);
            }
            String pattern = "\\d{4}[-|/]\\d{2}[-|/]\\d{2}[ ]\\d{2}[:]\\d{2}[:]\\d{2}";
            if (strDate.matches(pattern)) {
                if (strDate.contains("/")) {
                    aDate = convertStringToDate("yyyy/MM/dd HH:mm:ss", strDate);
                } else {
                    aDate = convertStringToDate(TIME_PATTERN, strDate);
                }
            } else {
                if (strDate.contains("/")) {
                    aDate = convertStringToDate("yyyy/MM/dd", strDate);
                } else {
                    aDate = convertStringToDate(DATE_PATTERN, strDate);
                }
            }
        } catch (ParseException pe) {
            log.error("Could not convert '" + strDate + "' to a date, throwing exception");
            pe.printStackTrace();
        }

        return aDate;
    }
    /**
     * 根据提供日期格式及日期字符串加工日期
     */
    public static final Date convertStringToDate(String aMask, String strDate) throws ParseException {
        SimpleDateFormat df = null;
        Date date = null;
        df = new SimpleDateFormat(aMask);

        if (log.isDebugEnabled()) {
            log.debug("converting '" + strDate + "' to date with mask '" + aMask + "'");
        }

        try {
            date = df.parse(strDate);
        } catch (ParseException pe) {
            // log.error("ParseException: " + pe);
            throw new ParseException(pe.getMessage(), pe.getErrorOffset());
        }

        return (date);
    }

    /**
     * 将日期转为指定格式的字符串
     */
    public static final String getDateTime(String aMask, Date aDate) {
        SimpleDateFormat df = null;
        String returnValue = "";
        if (aDate == null) {
            log.error("aDate is null!");
        } else {
            df = new SimpleDateFormat(aMask);
            returnValue = df.format(aDate);
        }
        return (returnValue);
    }

    /**
     * 将日期转为系统格式的(年月日)日期字符串
     */
    public static final String convertDateToString(Date aDate) {
        return getDateTime(DATE_PATTERN, aDate);
    }

    /**
     * 将日期转成年月日 时分秒格式的字符串
     */
    public static final String convertDateTimeToString(Date aDate) {
        return getDateTime(TIME_PATTERN, aDate);
    }


    /**
     * 在指定日期增加天数得到日期
     */
    public static Date addDays(Date date, int days) {
        return add(date, days, Calendar.DATE);
    }

    /**
     * 在指定日期增加月数得到日期
     */
    public static Date addMonths(Date date, int months) {
        return add(date, months, Calendar.MONTH);
    }

    /**
     * 在指定日期增加年数得到日期
     */
    public static Date addYears(Date date, int years) {
        return add(date, years, Calendar.YEAR);
    }

    /**
     * 是否是同一天
     */
    public static boolean isTheSameDate(Date date1, Date date2) {
        if (date1!=null && date2!=null) {
            return (date1.getTime()/ONEDAY_MS == date2.getTime()/ONEDAY_MS);
        }
        return false;
    }   

    /**
     * 获取最近几周内的日期,返回开始日期和结束日期
     */
    public static Map<String, Date> getRecentlyWeeks(int week){
        Date dateNow = new Date();
        Calendar cl = Calendar.getInstance();
        cl.setTime(dateNow);
        cl.add(Calendar.WEEK_OF_YEAR, -week);
        Date dateFrom = cl.getTime();
        Map<String, Date> result = new HashMap<String, Date>();
        result.put("startDate", dateFrom);
        result.put("endDate", dateNow);
        return result;
    } 


    private static Calendar getCalendar(Date date) {
        Calendar calendar = Calendar.getInstance();
        if(date!=null){
            calendar.setTime(date);
        }
        return calendar;
    }

    /**
     * @param amount    需要增加或减少的量
     * @param field     需要增加或减少的参数(年/月/日),例如 Calendar.YEAR,Calendar.MONTH
     */
    private static Date add(Date date, int amount, int field) {
        Calendar calendar = getCalendar(date);
        calendar.add(field, amount);
        return calendar.getTime();
    }


    /**
     * 将行如 yyyyMMdd的无分隔符的字符串日期,转换成日期
     */
    public static Date convertStrNoSymbolToDate(String dateStr){
        Date date = null;
        String pattern = "\\d{8}";
        if(StrUtils.isNotEmpty(dateStr) && dateStr.matches(pattern)){
            dateStr = dateStr.substring(0, 4)+"-"+dateStr.substring(4, 6)+"-"+dateStr.substring(6, 8);
            date = convertStringToDate(dateStr);
        }
        return date;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hutool是一个Java开源工具类库,其中包含了丰富的常用工具类,提供了一套规范的工具类,使得开发更加简化和高效。其中也包括了时间工具类。Hutool的时间工具类主要是针对日期和时间相关的操作提供了一些便捷的方法。你可以使用Hutool的DateUtil工具类来进行日期和时间的处理。 使用Hutool的DateUtil工具类,你可以进行以下操作: 1. 获取当前日期和时间; 2. 格式化日期和时间; 3. 解析字符串为日期和时间对象; 4. 比较两个日期或时间的大小; 5. 进行日期和时间的加减运算; 6. 设置日期和时间的指定部分(如年、月、日、小时、分钟等); 7. 获取日期和时间的指定部分(如年、月、日、小时、分钟等)。 通过引入Hutool的依赖,你可以在你的项目中使用Hutool的时间工具类。在pom.xml文件中,添加以下依赖: ```xml <dependencies> <dependency> *** </dependency> </dependencies> ``` 然后,你可以使用Hutool的DateUtil工具类来进行日期和时间的处理。具体的使用方法可以参考Hutool的官方文档和API参考。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [HuTool从入门到精通1-日期和文件工具类入门](https://blog.csdn.net/weixin_44480609/article/details/125330109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值