java 获取月,日,小时的开始时间和结束时间

在统计的数据是时候,要统计某月、日、小时的数据。开始时间月、日、小时的最初时间,结束时间是月、日、小时的最晚时间。该如何处理呢?

比如: 2020-10-10 08:22:45

小时开始时间:2020-10-10 08:00:00

小时开始时间:2020-10-10 08:59:59

日开始时间:2020-10-10 00:00:00

日开始时间:2020-10-10 23:59:59

月开始时间:2020-10-01 00:00:00

月开始时间:2020-10-31 23:59:59

处理的时候,要对时间进行截取和拼接。

直接上代码:

代码:

    private static String datePattern = "yyyy-MM-dd";

    private static String dateHourPattern = "yyyy-MM-dd HH";

    private static String dateTimePattern = "yyyy-MM-dd HH:mm:ss";

    /**
     *  时间转时间字符串
     * @param date  日期
     * @param pattern  格式
     * @return String
     */
    public static String format(Date date, String pattern) {
        if (date == null)
            return "";
        return DateFormatUtils.format(date, pattern);
    }

    /**
     *  时间转时间字符串为yyyy-MM-dd HH:mm:ss 格式
     * @param date  日期
     * @return String
     */
    public static String formatDateTime(Date date) {
        if (date == null)
            return "";
        return DateFormatUtils.format(date, dateTimePattern);
    }

    /**
     *  时间字符串转化为yyyy-MM-dd HH:mm:ss 格式
     * @param str  日期
     * @return Date
     */
    public static Date parseDateTime(String str) {
        if (str == null)
            return null;
        try {
            return DateUtils.parseDate(str, dateTimePattern);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     *  字符串转时间
     * @param str  字符串
     * @param dateTimePattern  格式
     * @return Date
     */
    public static Date parseDateTime(String str, String dateTimePattern) {
        if (str == null)
            return null;
        try {
            return DateUtils.parseDate(str, Locale.CHINESE, dateTimePattern);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Date formatDateTimeHourZero(Date date) {
        String formatDate = format(date, dateHourPattern);
        return parseDateTime(formatDate + ":00:00");
    }

    public static Date formatDateTimeHourEnd(Date date) {
        String formatDate = format(date, dateHourPattern);
        return parseDateTime(formatDate + ":59:59");
    }

    public static Date formatDateTimeDayZero(Date date) {
        String formatDate = format(date, datePattern);
        return parseDateTime(formatDate + " 00:00:00");
    }

    public static Date formatDateTimeDayEnd(Date date) {
        String formatDate = format(date, datePattern);
        return parseDateTime(formatDate + " 23:59:59");
    }

    /**
     * 获取指定日期所在月的第一天
     * @param date 日期
     * @return 所在月的第一天
     */
    public static Date getFirstOfMonth(Date date){
        //获取当前月第一天:
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
        return calendar.getTime();
    }

    /**
     * 获取指定日期所在月的第最后一天
     * @param date 日期
     * @return  最后一天
     */
    public static Date getLastOfMonth(Date date) {
        //获取当前月最后一天
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return calendar.getTime();
    }



    public static void main(String args[]) {
        Date date = parseDateTime("2020-10-10 08:22:45");;
        System.out.println("=========hour=========");
        Date hourStart = formatDateTimeHourZero(date);
        System.out.println(formatDateTime(hourStart));
        Date hourEnd = formatDateTimeHourEnd(date);
        System.out.println(formatDateTime(hourEnd));

        System.out.println("=========day=========");
        Date dayStart = formatDateTimeDayZero(date);
        System.out.println(formatDateTime(dayStart));
        Date dayEnd = formatDateTimeDayEnd(date);
        System.out.println(formatDateTime(dayEnd));

        System.out.println("=========month=========");
        Date monthStart = getFirstOfMonth(date);
        monthStart =  formatDateTimeDayZero(monthStart);
        System.out.println(formatDateTime(monthStart));

        Date monthEnd = getLastOfMonth(date);
        monthEnd =  formatDateTimeDayEnd(monthEnd);
        System.out.println(formatDateTime(monthEnd));

    }

结果:

=========hour=========
2020-10-10 08:00:00
2020-10-10 08:59:59
=========day=========
2020-10-10 00:00:00
2020-10-10 23:59:59
=========month=========
2020-10-01 00:00:00
2020-10-31 23:59:59

 

总结

    在获取月、日、时开始和结束时间的时候,先对日期进行格式化,再拼接尾巴的内容。

   

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值