Java获取指定时间段内的日期

Java日期总结:

1.获取每天的开始时间和结束时间

 /**
     * 获取每天的开始时间
     * @param date
     * @return
     */
    public static Date getDayStartTime(Date date){
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);//时
        cal.set(Calendar.MINUTE, 0);//分
        cal.set(Calendar.SECOND, 0);//秒
        cal.set(Calendar.MILLISECOND, 0);//毫秒
        return cal.getTime();
    }

    /**
     * 获取每天的结束时间
     * @param date
     * @return
     */
    public static Date getDayEndTime(Date date){
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 23);//时
        cal.set(Calendar.MINUTE, 59);//分
        cal.set(Calendar.SECOND, 59);//秒
        cal.set(Calendar.MILLISECOND, 0);//毫秒
        return cal.getTime();
    }

2.获取每月的第一天和最后一天

 /**
     * 获取每月的第一天
     * @param month
     * @return
     */
    public static Date getMonthStartTime(Integer month){
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        //将当前日期重置为每月的第一天
        cal.set(Calendar.DAY_OF_MONTH,1);
        cal.set(Calendar.MONTH,(month - 1));//月
        cal.set(Calendar.DATE,cal.getActualMinimum(Calendar.DATE));//天
        return getDayStartTime(cal.getTime());
    }

    /**
     * 获取每月的最后一天
     * @param month
     * @return
     */
    public static Date getMonthEndTime(Integer month){
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.DAY_OF_MONTH,1);
        cal.set(Calendar.MONTH,(month - 1));//月
        cal.set(Calendar.DATE,cal.getActualMaximum(Calendar.DATE));//天
        return getDayEndTime(cal.getTime());
    }

3.获取每年的第一天和最后一天时间

/**
     * 获取某年第一天日期
     *
     * @param year 年份
     * @return Date
     */
    public Date getYearStartTime(int year) {
        Calendar cal = Calendar.getInstance();
        cal.clear();
        cal.set(Calendar.YEAR, year);
        return getDayStartTime(cal.getTime());
    }

    /**
     * 获取某年最后一天日期
     *
     * @param year 年份
     * @return Date
     */
    public Date getYearEndTime(int year) {
        Calendar cal = Calendar.getInstance();
        cal.clear();
        cal.set(Calendar.YEAR, year);
        cal.roll(Calendar.DAY_OF_YEAR, -1);
        return getDayEndTime(cal.getTime());
    }

4.获取某个月份的所有日期:

 /**
     * 获取指定月份的所有日期
     * @param month
     * @return
     */
    public static List<Date> getAllDaysByMonth(Integer month){
        List<Date> list = new ArrayList<>();
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        //将当前日期重置为每月的第一天
        cal.set(Calendar.DAY_OF_MONTH,1);
        cal.set(Calendar.MONTH,(month - 1));//月
        int subDay = cal.getActualMaximum(Calendar.DATE) - cal.getActualMinimum(Calendar.DATE) + 1;
        for (int i = 1; i <= subDay; i++) {
            cal.set(Calendar.HOUR_OF_DAY, 0);//时
            cal.set(Calendar.MINUTE, 0);//分
            cal.set(Calendar.SECOND, 0);//秒
            cal.set(Calendar.MILLISECOND, 0);//毫秒
            cal.set(Calendar.DATE, i);
            list.add(cal.getTime());
        }
        return list;
    }
  1. 获取两个日期之间的日期
 /**
     * 获取两个日期之间的日期
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    public static List<Date> getDistanceDate(String startTime, String endTime) {
        List<Date> dates = new ArrayList<>();
        Date startDateTime = null;
        Date endDateTime = null;
        try {
            startDateTime = TemplateDate.dateToStr(startTime, "yyyy-MM-dd");
            endDateTime = TemplateDate.dateToStr(endTime, "yyyy-MM-dd");
        } catch (BusinessException e) {
            e.printStackTrace();
        }
        long differentDays = endDateTime.getTime() - startDateTime.getTime();
        int targetDays = ((int) (differentDays / 86400000L)) + 1;
        Calendar cal = Calendar.getInstance();
        for (int i = 0; i < targetDays; i++) {
            cal.setTime(startDateTime);
            cal.add(Calendar.DATE, i);
            dates.add(cal.getTime());
        }
        return dates;
    }

    public static void main(String[] args) throws BusinessException {
        String s1 = "2021-05-31 17:59:01";
        String s2 = "2021-04-20 17:59:01";
        List<Date> distanceDate = getDistanceDate(s2, s1);
        for (Date date : distanceDate) {
            System.out.println(TemplateDate.dateToStr(date, null));
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的Calendar类来获取指定时间段内的每个自然周的周一。具体方法如下: 1. 定义起始日期和结束日期。 2. 创建一个Calendar对象并设置为起始日期。 3. 使用while循环,判断当前日期是否在指定时间段内,如果是则继续。 4. 在循环内,先获取当前日期的星期几,如果是周日则往前推6天,如果是其他天则往前推相应天数,使其变成周一。 5. 输出当前的日期。 6. 将当前日期加7天,进入下一周的循环。 代码示例: ``` import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class GetMonday { public static void main(String[] args) { String fromDate = "2021-01-01"; // 起始日期 String toDate = "2021-02-28"; // 结束日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); try { // 设置起始日期 Date start = sdf.parse(fromDate); c.setTime(start); // 判断当前日期是否在指定时间段内 while(c.getTime().before(sdf.parse(toDate)) || c.getTime().equals(sdf.parse(toDate))) { // 获取当前日期的星期几 int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); // 将日期调整为当前周的周一 if(dayOfWeek == Calendar.SUNDAY) { c.add(Calendar.DAY_OF_MONTH, -6); } else { c.add(Calendar.DAY_OF_MONTH, (2 - dayOfWeek)); } // 输出当前日期 System.out.println(sdf.format(c.getTime())); // 将日期加7天,进入下一周 c.add(Calendar.DAY_OF_MONTH, 7); } } catch (Exception e) { e.printStackTrace(); } } } ``` 输出结果: ``` 2021-01-04 2021-01-11 2021-01-18 2021-01-25 2021-02-01 2021-02-08 2021-02-15 2021-02-22 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值