Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

      • 概述
      • 日期时间工具-DateUtil
      • 日期时间对象-DateTime
      • 农历日期-ChineseDate
      • LocalDateTime工具-LocalDateTimeUtil
      • 计时器工具-StopWatch
      • 日历工具-CalendarUtil
      • 日期构建器-DateBuilder
      • 日期间隔-DateBetween
      • 月份枚举-Month
      • 星期枚举-Week
      • 时间单位-DateUnit
      • 日期范围-DateRange
        • 介绍
        • 主要功能
          • 1. 日期范围的创建
          • 2. 日期范围的属性获取
          • 3. 日期范围的遍历
          • 4. 日期范围的比较
          • 5. 日期范围的调整
        • 适用场景
    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 日期时间(date)
Hutool
2026-01-03
目录

日期范围-DateRange

# 介绍

DateRange是Hutool中用于处理日期范围的类,提供了丰富的日期范围操作,包括范围的创建、遍历、判断等功能,简化了日期范围相关的编程。

# 主要功能

# 1. 日期范围的创建

// 创建指定开始和结束日期的范围
Date start = DateUtil.parse("2023-01-01");
Date end = DateUtil.parse("2023-12-31");
DateRange range = new DateRange(start, end);

// 使用字符串创建日期范围
DateRange range = new DateRange("2023-01-01", "2023-12-31");

// 创建当前月的日期范围
DateRange currentMonth = DateRange.month();

// 创建指定年份月份的日期范围
DateRange monthRange = DateRange.month(2023, 12);

// 创建当前周的日期范围
DateRange currentWeek = DateRange.week();

// 创建当前年的日期范围
DateRange currentYear = DateRange.year();

# 2. 日期范围的属性获取

// 获取开始日期
Date start = range.getStart();

// 获取结束日期
Date end = range.getEnd();

// 获取日期范围的天数
long days = range.days();

// 获取日期范围的周数
long weeks = range.weeks();

// 判断日期范围是否包含今天
boolean containsToday = range.contains(new Date());

// 判断日期范围是否包含指定日期
boolean containsDate = range.contains(DateUtil.parse("2023-06-15"));

# 3. 日期范围的遍历

// 遍历日期范围内的每一天
for (Date date : range) {
    Console.log(DateUtil.formatDate(date));
}

// 遍历日期范围内的每一天,使用步进
for (Date date : DateRange.of("2023-01-01", "2023-01-10", DateField.DAY_OF_MONTH, 2)) {
    Console.log(DateUtil.formatDate(date)); // 输出:2023-01-01, 2023-01-03, 2023-01-05, 2023-01-07, 2023-01-09
}

// 遍历日期范围内的每一周
DateRange yearRange = DateRange.year(2023);
for (DateRange weekRange : yearRange.range(DateField.WEEK_OF_YEAR)) {
    Console.log("周开始:" + DateUtil.formatDate(weekRange.getStart()) + ", 周结束:" + DateUtil.formatDate(weekRange.getEnd()));
}

// 遍历日期范围内的每一月
DateRange yearRange = DateRange.year(2023);
for (DateRange monthRange : yearRange.range(DateField.MONTH)) {
    Console.log("月开始:" + DateUtil.formatDate(monthRange.getStart()) + ", 月结束:" + DateUtil.formatDate(monthRange.getEnd()));
}

# 4. 日期范围的比较

DateRange range1 = DateRange.of("2023-01-01", "2023-06-30");
DateRange range2 = DateRange.of("2023-07-01", "2023-12-31");
DateRange range3 = DateRange.of("2023-04-01", "2023-09-30");

// 判断两个范围是否相交
boolean isIntersect = range1.isIntersect(range3); // true
boolean isIntersect = range1.isIntersect(range2); // false

// 判断一个范围是否包含另一个范围
boolean isContains = range1.contains(range3); // false
DateRange range4 = DateRange.of("2023-02-01", "2023-03-31");
boolean isContains = range1.contains(range4); // true

// 获取两个范围的交集
DateRange intersectRange = range1.intersect(range3);
Console.log("交集开始:" + DateUtil.formatDate(intersectRange.getStart()) + ", 交集结束:" + DateUtil.formatDate(intersectRange.getEnd())); // 2023-04-01 到 2023-06-30

// 获取两个范围的并集
List<DateRange> unionRanges = range1.union(range3);
for (DateRange unionRange : unionRanges) {
    Console.log("并集开始:" + DateUtil.formatDate(unionRange.getStart()) + ", 并集结束:" + DateUtil.formatDate(unionRange.getEnd())); // 2023-01-01 到 2023-09-30
}

# 5. 日期范围的调整

// 扩展日期范围
DateRange extendedRange = range.expand(7, DateField.DAY_OF_MONTH); // 前后各扩展7天

// 缩小日期范围
DateRange contractedRange = range.contract(7, DateField.DAY_OF_MONTH); // 前后各缩小7天

// 偏移日期范围
DateRange offsetRange = range.offset(1, DateField.MONTH); // 日期范围整体向后偏移1个月

// 拆分日期范围
List<DateRange> splitRanges = range.split(DateField.MONTH); // 按月份拆分为多个范围

# 适用场景

DateRange适用于以下场景:

  • 需要处理日期范围时
  • 需要遍历日期范围内的日期时
  • 需要判断日期是否在范围内时
  • 需要计算日期范围的交集、并集时
  • 需要拆分或调整日期范围时
  • 需要处理周期性日期范围时

通过DateRange,开发者可以更加便捷地处理日期范围相关的业务逻辑,避免了繁琐的日期计算和判断。

时间单位-DateUnit
简介

← 时间单位-DateUnit 简介→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式