Java 工具类 —— 时间操作公共方法DateUtils


开发中总会碰到各种各样时间相关的获取和计算,每次写新的方法不仅麻烦,还造成代码不能复用率低得缺点,所以总结了下日期相关操作的公共工具类。

如下每种类型拷贝一个示例:完整版的查看https://download.csdn.net/download/u011909918/10895907


一、Calendar,Date,DateFormat

Calendar: 日历类

Date:日期类

DateFormat:日期显示模板

二、常量定义

//两种常见日期类型
    public static final DateFormat YYYYMMDDHHMISS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static final DateFormat YYYYMMDD = new SimpleDateFormat("yyyy-MM-dd");

    public static final String[] WEEKS = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

    //日期类型
    public enum DateType{
        YEAR(365*24*60*60*1000L),
        MONTH(30*24*60*60*1000L),
        DAY(24*60*60*1000L),
        HOUR(60*60*1000L),
        MINUTE(60000L),
        SECOND(1000L),
        MILLISECOND(1L);

        private Long index;

        DateType(Long index){
            this.index = index;
        }

        public Long getIndex(){
           return this.index;
        }

    }

三、主要内容

1、三种类型的当前时间获取方法

/**
     * 查询当前String时间
     *
     * @param df 时间模板
     * @return String类型的时间
     *
     * @auth LD
     * @date 2019-01-03
     *
     * */
    public static String currentTimeString(DateFormat df){
        if(df == null){
            df = YYYYMMDDHHMISS;
        }
        return df.format(new Date());
    }

   

2、三种日期类型的相互转换(6个方法)


    /**
     * String --> Long
     *
     * @param date 需要转换的时间参数
     * @return Long类型的时间
     *
     * @auth LD
     * @date 2019-01-03
     *
     * */
    public static Long timeString2Long(String date) throws ParseException{
        return YYYYMMDDHHMISS.parse(date).getTime();
    }

3、三种类型的时间差计算(单位通过DateType设置,年/月/日/时/分/秒/毫秒

/**
     * String时间差(end - begin)
     *
     * @param begin 开始时间
     * @param end 结束时间
     * @param dateType 返回时间类型(年月日时分秒),从DateType中获取 DateType.YEAR.getIndex();
     * @return Double型时间差
     *
     * @auth LD
     * @date 2019-01-03
     *
     * */
    public static Double timeMinus(String begin, String end, Long dateType) throws ParseException{
        Long resultMillisecond = YYYYMMDDHHMISS.parse(end).getTime() - YYYYMMDDHHMISS.parse(begin).getTime();
        return Math.round((resultMillisecond*1.0/dateType) * 100)/100.0;
    }

4、获取输入日期的详细信息

/**
     * 获取年月日时分秒By String
     *
     * @return String类型的时间 yyyy-MM-dd HH:mm:ss格式
     *
     * @auth LD
     * @date 2019-01-03
     *
     * */
    public static Map<String, Object> timeDetail(String date) throws ParseException{
        Map<String, Object> result = new HashMap<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(YYYYMMDDHHMISS.parse(date));

        int dayWeek = calendar.get(Calendar.DAY_OF_WEEK) == 1? 7: calendar.get(Calendar.DAY_OF_WEEK);

        result.put("year", calendar.get(Calendar.YEAR));
        result.put("month", calendar.get(Calendar.MONTH) + 1);
        result.put("dayYear", calendar.get(Calendar.DAY_OF_YEAR));
        result.put("dayMonth", calendar.get(Calendar.DAY_OF_MONTH));
        result.put("dayWeekInt", calendar.get(Calendar.DAY_OF_WEEK));
        result.put("dayWeekString", WEEKS[dayWeek-2]);
        result.put("hour", calendar.get(Calendar.HOUR_OF_DAY));
        result.put("minute", calendar.get(Calendar.MINUTE));
        result.put("second", calendar.get(Calendar.SECOND));
        return result;
    }

5、获取输入日期周边几周的日期信息

/**
     * 获取输入时间当前或前后几周的日期(周一为第一天)
     *
     * @param date 输入时间
     * @param after 推后几周,当前为0,推后为正,提前为负
     * @return String类型的时间
     *
     * @auth LD
     * @date 2019-01-03
     *
     * */
    public static Map<String, Object> timeWeekDays(String date, int after) throws ParseException{
        Map<String, Object> result = new LinkedHashMap<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(YYYYMMDDHHMISS.parse(date));

        //日历提前或推后
        calendar.add(Calendar.DAY_OF_YEAR, after*7);

        //获取周一时间
        if(1 == calendar.get(Calendar.DAY_OF_WEEK)){
            calendar.add(Calendar.DAY_OF_YEAR, -6);
        }
        calendar.add(Calendar.DAY_OF_YEAR, 2 - calendar.get(Calendar.DAY_OF_WEEK));

        result.put(WEEKS[0], YYYYMMDD.format(calendar.getTime()));
        for(int i=1; i < 7; i++){
            calendar.add(Calendar.DAY_OF_YEAR, 1);
            result.put(WEEKS[i], YYYYMMDD.format(calendar.getTime()));
        }
        return result;
    }

6、获取输入时间周边X天的日期

/**
     * 获取输入时间当前或前后几天的日期
     *
     * @param date 输入时间
     * @param after 推后几天,当前为0,推后为正,提前为负
     * @return String类型的时间
     *
     * @auth LD
     * @date 2019-01-03
     *
     * */
    public static String timeDays(String date, int after) throws ParseException{
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(YYYYMMDDHHMISS.parse(date));

        //日历提前或推后
        calendar.add(Calendar.DAY_OF_YEAR, after);

        return YYYYMMDD.format(calendar.getTime());
    }

7、获取输入时间当月天数

/**
     * 获取输入时间当月天数
     *
     * @param date 输入时间
     *
     * @auth LD
     * @date 2019-01-08
     *
     * */
    public static Integer timeMonthDays(String date) throws ParseException{
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(YYYYMMDDHHMISS.parse(date));
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

欢迎各位大佬指正补充。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值