获取每天或每小时的开始时间和结束时间(即小于下一开始时间)工具类


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

import static java.util.Calendar.DAY_OF_MONTH;

public class DateUtil {

    /**
     * 根据年月获取当月每天的开始和结束时间
     *
     * @param year  年
     * @param month 月
     * @return Map<String, String>
     */
    public static Map<String, String> getDayByMonth(int year, int month) {
        Map<String, String> map = new TreeMap<>();
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        calendar.set(year, month, 0);
        int currentYear = calendar.get(Calendar.YEAR);//年份
        int currentMonth = calendar.get(Calendar.MONTH) + 1;//月份
        int day = calendar.getActualMaximum(Calendar.DATE);

        for (int i = 1; i <= day; i++) {
            String date = null;
            if (currentMonth < 10 && i < 10) {
                date = currentYear + "-0" + currentMonth + "-0" + i;
            }
            if (currentMonth < 10 && i >= 10) {
                date = currentYear + "-0" + currentMonth + "-" + i;
            }
            if (currentMonth >= 10 && i < 10) {
                date = currentYear + "-" + currentMonth + "-0" + i;
            }
            if (currentMonth >= 10 && i >= 10) {
                date = currentYear + "-" + currentMonth + "-" + i;
            }
            map.put(date + " 00:00:00", date + " 23:59:59");
        }
        return map;
    }

    /**
     * 根据年月获取当月的每天开始和下一天开始时间(即每天)
     *
     * @param year  年
     * @param month 月
     * @return Map<String, String> 当天的开始<=date<下一天的开始
     */
    public static Map<String, String> getDaysByMonth(int year, int month) {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        int days = calendar.getActualMaximum(Calendar.DATE);
        int currentMonth = calendar.get(Calendar.MONTH) + 1;
        System.out.println(currentMonth);
        Map<String, String> map = new TreeMap<>();
        for (int day = 1; day <= days; day++) {
            calendar.set(DAY_OF_MONTH, day);
            String todayStr = format.format(calendar.getTime());
            calendar.set(DAY_OF_MONTH, calendar.get(DAY_OF_MONTH) + 1);
            Date tomorrow = calendar.getTime();
            String tomorrowStr = format.format(tomorrow);
            map.put(todayStr + " 00:00:00", tomorrowStr + " 00:00:00");
        }
        return map;
    }

    /**
     * 根据年月获取每天每一小时的开始和下一小时开始时间
     *
     * @param year  年
     * @param month 月
     * @return Map<String, String> 小时开始<=date<下一小时的开始
     */
    public static Map<String, String> getHoursByDay(int year, int month) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar c = Calendar.getInstance();
        c.set(year, month, 0);
        //int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        int days = c.get(DAY_OF_MONTH);
        Map<String, String> dayHours = new TreeMap<>();
        for (int day = 1; day <= days; day++) {
            c.set(DAY_OF_MONTH, day);
            for (int hour = 0; hour <= 23; hour++) {
                c.set(Calendar.HOUR_OF_DAY, hour);
                c.set(Calendar.MINUTE, 0);
                c.set(Calendar.SECOND, 0);
                c.set(Calendar.MILLISECOND, 0);
                String beginHour = sdf.format(c.getTime());
                c.add(Calendar.HOUR, 1);
//                c.set(Calendar.MINUTE, 59);
//                c.set(Calendar.SECOND, 59);
//                c.set(Calendar.MILLISECOND, 999);
                String endHour = sdf.format(c.getTime());
                dayHours.put(beginHour, endHour);
            }
        }
        return dayHours;
    }

    public static void main(String[] args) {
        getHoursByDay(2021, 6).forEach((k, v) -> {
            System.out.println(k + " " + v);
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值