hutool.core.date

日期时间工具模块,对应 Java Hutool 的 cn.hutool.core.date.DateUtil 和 cn.hutool.core.date.DateTime。

使用 pendulum 作为底层日期时间库,提供丰富的日期操作方法。

Module Contents

Classes

DateTime

日期时间封装类,包装 pendulum.DateTime。

DateUtil

日期工具类,对应 Java cn.hutool.core.date.DateUtil。

Functions

_to_pendulum

将各种日期类型统一转换为 pendulum.DateTime。

Data

API

hutool.core.date._timedelta_pattern = <Multiline-String>
hutool.core.date._TIMELTA_RE = 'compile(...)'
class hutool.core.date.DateTime(dt: Union[datetime.datetime, str, pendulum.DateTime, hutool.core.date.DateTime, None] = None)

日期时间封装类,包装 pendulum.DateTime。

与 Java Hutool 的 cn.hutool.core.date.DateTime 对应, 对 pendulum 的 DateTime 进行封装,提供链式调用和便捷方法。

Initialization

构造 DateTime 对象。

参数:

dt – 可以是 None(当前时间)、字符串(自动解析)、 datetime 对象、pendulum.DateTime 或另一个 DateTime。

property dt: pendulum.DateTime

获取内部 pendulum.DateTime 对象。

year() int

获取年份。

返回:

年份

month() int

获取月份(1-12)。

返回:

月份

day_of_month() int

获取日(1-31)。

返回:

hour() int

获取小时(0-23)。

返回:

小时

minute() int

获取分钟(0-59)。

返回:

分钟

second() int

获取秒(0-59)。

返回:

day_of_week() int

获取星期几(ISO 标准:1=周一, 7=周日)。

返回:

星期几(1-7)

quarter() int

获取季度(1-4)。

返回:

季度

week_of_year() int

获取一年中的第几周(ISO 标准)。

返回:

周数

to_str(fmt: str = 'YYYY-MM-DD HH:mm:ss') str

格式化为字符串。

参数:

fmt – 格式化模式,使用 pendulum 的格式化占位符。

返回:

格式化后的字符串。

to_date() datetime.date

转换为 date 对象。

返回:

date 对象

to_datetime() datetime.datetime

转换为标准 datetime 对象。

返回:

datetime 对象

offset(**kwargs) hutool.core.date.DateTime

偏移日期时间。

参数:

kwargs – 偏移参数,支持 years, months, weeks, days, hours, minutes, seconds。

返回:

偏移后的新 DateTime 对象。

示例:

DateTime().offset(days=1) # 明天此时 DateTime().offset(months=-1) # 上月此时

begin_of_day() hutool.core.date.DateTime

获取当天开始时间(00:00:00)。

返回:

当天开始的 DateTime 对象

end_of_day() hutool.core.date.DateTime

获取当天结束时间(23:59:59.999999)。

返回:

当天结束的 DateTime 对象

begin_of_month() hutool.core.date.DateTime

获取当月开始时间。

返回:

当月开始的 DateTime 对象

end_of_month() hutool.core.date.DateTime

获取当月结束时间。

返回:

当月结束的 DateTime 对象

begin_of_year() hutool.core.date.DateTime

获取当年开始时间。

返回:

当年开始的 DateTime 对象

end_of_year() hutool.core.date.DateTime

获取当年结束时间。

返回:

当年结束的 DateTime 对象

begin_of_week() hutool.core.date.DateTime

获取本周开始时间(周一)。

返回:

本周开始的 DateTime 对象

end_of_week() hutool.core.date.DateTime

获取本周结束时间(周日)。

返回:

本周结束的 DateTime 对象

begin_of_quarter() hutool.core.date.DateTime

获取本季度开始时间。

返回:

本季度开始的 DateTime 对象

end_of_quarter() hutool.core.date.DateTime

获取本季度结束时间。

返回:

本季度结束的 DateTime 对象

__repr__() str
__str__() str
__eq__(other: object) bool
__lt__(other: object) bool
__gt__(other: object) bool
__le__(other: object) bool
__ge__(other: object) bool
__hash__() int
__sub__(other: object) datetime.timedelta
__add__(other: object) hutool.core.date.DateTime
classmethod of(dt: Union[datetime.datetime, str, pendulum.DateTime, hutool.core.date.DateTime, None] = None) hutool.core.date.DateTime

工厂方法,等同于构造函数。

参数:

dt – 日期时间

返回:

DateTime 对象

classmethod of_date(y: int, m: int, d: int) hutool.core.date.DateTime

根据年月日创建 DateTime。

参数:
  • y – 年

  • m – 月

  • d – 日

返回:

DateTime 对象

classmethod of_datetime(y: int, m: int, d: int, h: int = 0, mi: int = 0, s: int = 0) hutool.core.date.DateTime

根据年月日时分秒创建 DateTime。

参数:
  • y – 年

  • m – 月

  • d – 日

  • h – 时

  • mi – 分

  • s – 秒

返回:

DateTime 对象

classmethod of_pattern(date_str: str, fmt: str) hutool.core.date.DateTime

根据格式字符串解析创建 DateTime。

参数:
  • date_str – 日期字符串

  • fmt – 格式模式,如 “yyyy-MM-dd HH:mm:ss”

返回:

DateTime 对象

classmethod now_utc() hutool.core.date.DateTime

获取 UTC 当前时间的 DateTime。

返回:

DateTime 对象

classmethod of_epoch(epoch: Union[int, float], is_millis: bool = True) hutool.core.date.DateTime

根据时间戳创建 DateTime。

参数:
  • epoch – 时间戳

  • is_millis – 是否为毫秒时间戳

返回:

DateTime 对象

is_weekend() bool

是否为周末。

返回:

周六或周日返回 True

is_am() bool

是否为上午。

返回:

上午返回 True

is_pm() bool

是否为下午。

返回:

下午返回 True

is_past() bool

是否为过去时间。

返回:

过去时间返回 True

is_future() bool

是否为未来时间。

返回:

未来时间返回 True

is_before(other: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断是否在指定时间之前。

参数:

other – 比较对象

返回:

是否在前

is_after(other: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断是否在指定时间之后。

参数:

other – 比较对象

返回:

是否在后

is_between(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断是否在指定时间范围内(含边界)。

参数:
  • start – 起始时间

  • end – 结束时间

返回:

是否在范围内

is_leap_year() bool

是否为闰年。

返回:

闰年返回 True

is_last_day_of_month() bool

是否为当月最后一天。

返回:

最后一天返回 True

length_of_month() int

获取当月天数。

返回:

天数

length_of_year() int

获取当年天数。

返回:

天数

offset_day(days: int) hutool.core.date.DateTime

按天偏移。

参数:

days – 偏移天数

返回:

新的 DateTime

offset_week(weeks: int) hutool.core.date.DateTime

按周偏移。

参数:

weeks – 偏移周数

返回:

新的 DateTime

offset_month(months: int) hutool.core.date.DateTime

按月偏移。

参数:

months – 偏移月数

返回:

新的 DateTime

offset_year(years: int) hutool.core.date.DateTime

按年偏移。

参数:

years – 偏移年数

返回:

新的 DateTime

begin_of_second() hutool.core.date.DateTime

获取秒的开始(毫秒归零)。

返回:

DateTime

end_of_second() hutool.core.date.DateTime

获取秒的结束。

返回:

DateTime

begin_of_hour() hutool.core.date.DateTime

获取小时的开始。

返回:

DateTime

end_of_hour() hutool.core.date.DateTime

获取小时的结束。

返回:

DateTime

begin_of_minute() hutool.core.date.DateTime

获取分钟的开始。

返回:

DateTime

end_of_minute() hutool.core.date.DateTime

获取分钟的结束。

返回:

DateTime

format(fmt: str = 'YYYY-MM-DD HH:mm:ss') str

格式化为字符串。

参数:

fmt – pendulum 格式模式

返回:

格式化字符串

to_local_datetime_str() str

转换为本地日期时间字符串 “YYYY-MM-DD HH:mm:ss”。

返回:

日期时间字符串

with_timezone(tz: str) hutool.core.date.DateTime

转换时区。

参数:

tz – 时区名称,如 “UTC”, “Asia/Shanghai”

返回:

新的 DateTime

timezone_name() Optional[str]

获取时区名称。

返回:

时区名称字符串

hutool.core.date._to_pendulum(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime]) pendulum.DateTime

将各种日期类型统一转换为 pendulum.DateTime。

参数:

dt – DateTime、datetime 或 pendulum.DateTime 对象。

返回:

pendulum.DateTime 对象。

class hutool.core.date.DateUtil

日期工具类,对应 Java cn.hutool.core.date.DateUtil。

提供静态方法,用于日期的创建、格式化、解析、偏移、比较、时间差计算等操作。

NORM_DATETIME_PATTERN: str = 'YYYY-MM-DD HH:mm:ss'

标准日期时间格式:yyyy-MM-dd HH:mm:ss

NORM_DATE_PATTERN: str = 'YYYY-MM-DD'

标准日期格式:yyyy-MM-dd

NORM_TIME_PATTERN: str = 'HH:mm:ss'

标准时间格式:HH:mm:ss

ISO8601_PATTERN: str = 'YYYY-MM-DDTHH:mm:ssZ'

ISO 8601 格式

static date() hutool.core.date.DateTime

获取当前日期时间。

返回:

当前时间的 DateTime 对象。

static now() str

获取当前时间的标准格式字符串(yyyy-MM-dd HH:mm:ss)。

返回:

当前时间字符串。

static today() str

获取今天日期的标准格式字符串(yyyy-MM-dd)。

返回:

今天日期字符串。

static current(is_millis: bool = True) int

获取当前时间戳。

参数:

is_millis – True 返回毫秒时间戳,False 返回秒级时间戳。

返回:

当前时间戳。

static current_seconds() int

获取当前秒级时间戳。

返回:

秒级时间戳。

static format(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], fmt: str = 'YYYY-MM-DD HH:mm:ss') str

格式化日期时间。

参数:
  • dt – 日期时间对象。

  • fmt – 格式化模式(使用 pendulum 占位符)。

返回:

格式化后的字符串。

static format_date_time(dt: Union[hutool.core.date.DateTime, datetime.datetime]) str

格式化为标准日期时间字符串(yyyy-MM-dd HH:mm:ss)。

参数:

dt – 日期时间对象。

返回:

格式化后的字符串。

static format_date(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) str

格式化为标准日期字符串(yyyy-MM-dd)。

参数:

dt – 日期时间对象。

返回:

格式化后的字符串。

static format_time(dt: Union[hutool.core.date.DateTime, datetime.datetime]) str

格式化为标准时间字符串(HH:mm:ss)。

参数:

dt – 日期时间对象。

返回:

格式化后的字符串。

static parse(date_str: str, fmt: Optional[str] = None) hutool.core.date.DateTime

解析日期时间字符串。

参数:
  • date_str – 日期时间字符串。

  • fmt – 格式化模式,为 None 时自动识别。

返回:

DateTime 对象。

static parse_date_time(date_str: str) hutool.core.date.DateTime

解析标准日期时间字符串(yyyy-MM-dd HH:mm:ss)。

参数:

date_str – 日期时间字符串,如 “2023-10-01 12:30:00”。

返回:

DateTime 对象。

static parse_date(date_str: str) hutool.core.date.DateTime

解析标准日期字符串(yyyy-MM-dd)。

参数:

date_str – 日期字符串,如 “2023-10-01”。

返回:

DateTime 对象。

static parse_time(time_str: str) hutool.core.date.DateTime

解析标准时间字符串(HH:mm:ss),日期部分取今天。

参数:

time_str – 时间字符串,如 “12:30:00”。

返回:

DateTime 对象。

static parse_iso8601(iso_str: str) hutool.core.date.DateTime

解析 ISO 8601 格式字符串。

参数:

iso_str – ISO 8601 格式字符串,如 “2023-10-01T12:30:00+08:00”。

返回:

DateTime 对象。

static year(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取年份。

参数:

dt – 日期时间对象。

返回:

年份。

static month(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取月份(1-12)。

参数:

dt – 日期时间对象。

返回:

月份。

static day_of_month(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取日(1-31)。

参数:

dt – 日期时间对象。

返回:

日。

static hour(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取小时(0-23)。

参数:

dt – 日期时间对象。

返回:

小时。

static minute(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取分钟(0-59)。

参数:

dt – 日期时间对象。

返回:

分钟。

static second(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取秒(0-59)。

参数:

dt – 日期时间对象。

返回:

秒。

static day_of_week(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取星期几(ISO 标准:1=周一, 7=周日)。

参数:

dt – 日期时间对象。

返回:

星期几(1-7)。

static quarter(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取季度(1-4)。

参数:

dt – 日期时间对象。

返回:

季度。

static week_of_year(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取一年中的第几周(ISO 标准)。

参数:

dt – 日期时间对象。

返回:

周数。

static is_weekend(dt: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断是否为周末(周六或周日)。

参数:

dt – 日期时间对象。

返回:

是否为周末。

static is_am(dt: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断是否为上午。

参数:

dt – 日期时间对象。

返回:

是否为上午。

static is_pm(dt: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断是否为下午。

参数:

dt – 日期时间对象。

返回:

是否为下午。

static offset_day(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移天数。

参数:
  • dt – 日期时间对象。

  • n – 偏移天数,正数向后,负数向前。

返回:

偏移后的 DateTime 对象。

static offset_week(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移周数。

参数:
  • dt – 日期时间对象。

  • n – 偏移周数。

返回:

偏移后的 DateTime 对象。

static offset_month(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移月数。

参数:
  • dt – 日期时间对象。

  • n – 偏移月数。

返回:

偏移后的 DateTime 对象。

static offset_year(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移年数。

参数:
  • dt – 日期时间对象。

  • n – 偏移年数。

返回:

偏移后的 DateTime 对象。

static offset_hour(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移小时数。

参数:
  • dt – 日期时间对象。

  • n – 偏移小时数。

返回:

偏移后的 DateTime 对象。

static offset_minute(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移分钟数。

参数:
  • dt – 日期时间对象。

  • n – 偏移分钟数。

返回:

偏移后的 DateTime 对象。

static offset_second(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移秒数。

参数:
  • dt – 日期时间对象。

  • n – 偏移秒数。

返回:

偏移后的 DateTime 对象。

static yesterday() hutool.core.date.DateTime

获取昨天的日期。

返回:

昨天的 DateTime 对象。

static tomorrow() hutool.core.date.DateTime

获取明天的日期。

返回:

明天的 DateTime 对象。

static last_week() hutool.core.date.DateTime

获取上周的今天。

返回:

上周今天的 DateTime 对象。

static next_week() hutool.core.date.DateTime

获取下周的今天。

返回:

下周今天的 DateTime 对象。

static last_month() hutool.core.date.DateTime

获取上月的今天。

返回:

上月今天的 DateTime 对象。

static next_month() hutool.core.date.DateTime

获取下月的今天。

返回:

下月今天的 DateTime 对象。

static begin_of_day(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一天的开始时间(00:00:00)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

当天开始的 DateTime 对象。

static end_of_day(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一天的结束时间(23:59:59.999999)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

当天结束的 DateTime 对象。

static begin_of_week(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一周的开始时间(周一 00:00:00)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本周开始的 DateTime 对象。

static end_of_week(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一周的结束时间(周日 23:59:59.999999)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本周结束的 DateTime 对象。

static begin_of_month(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一月的开始时间(1号 00:00:00)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本月开始的 DateTime 对象。

static end_of_month(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一月的结束时间(月末 23:59:59.999999)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本月结束的 DateTime 对象。

static begin_of_quarter(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一季度的开始时间。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本季度开始的 DateTime 对象。

static end_of_quarter(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一季度的结束时间。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本季度结束的 DateTime 对象。

static begin_of_year(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一年的开始时间(1月1日 00:00:00)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本年开始的 DateTime 对象。

static end_of_year(dt: Union[hutool.core.date.DateTime, datetime.datetime, None] = None) hutool.core.date.DateTime

获取一年的结束时间(12月31日 23:59:59.999999)。

参数:

dt – 日期时间对象,为 None 时取当前时间。

返回:

本年结束的 DateTime 对象。

static between(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], unit: str = 'ms') int

计算两个时间之间的差值。

参数:
  • start – 起始时间。

  • end – 结束时间。

  • unit – 单位,可选值:ms(毫秒)、s(秒)、min(分钟)、hour(小时)、 day(天)、week(周)、month(月)、year(年)。

返回:

时间差(整数)。

static between_ms(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime]) int

计算两个时间之间的毫秒差。

参数:
  • start – 起始时间。

  • end – 结束时间。

返回:

毫秒差。

static between_day(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], is_reset: bool = False) int

计算两个时间之间的天数差。

参数:
  • start – 起始时间。

  • end – 结束时间。

  • is_reset – 是否重置时间为当天开始(忽略时分秒)。

返回:

天数差。

static between_week(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], is_reset: bool = False) int

计算两个时间之间的周数差。

参数:
  • start – 起始时间。

  • end – 结束时间。

  • is_reset – 是否重置时间为当天开始。

返回:

周数差。

static between_month(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], is_reset: bool = False) int

计算两个时间之间的月数差。

参数:
  • start – 起始时间。

  • end – 结束时间。

  • is_reset – 是否重置时间为当月开始。

返回:

月数差。

static between_year(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], is_reset: bool = False) int

计算两个时间之间的年数差。

参数:
  • start – 起始时间。

  • end – 结束时间。

  • is_reset – 是否重置时间为当年开始。

返回:

年数差。

static format_between(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], level: str = 'ms') str

格式化时间差为中文可读字符串。

根据 level 参数决定精度: - “ms”: 毫秒级,如 “3天2小时5分10秒123毫秒” - “s”: 秒级, 如 “3天2小时5分10秒” - “min”: 分钟级, 如 “3天2小时5分” - “hour”: 小时级, 如 “3天2小时” - “day”: 天级, 如 “3天”

参数:
  • start – 起始时间。

  • end – 结束时间。

  • level – 精度级别。

返回:

中文格式的时间差字符串。

static is_same_day(dt1: Union[hutool.core.date.DateTime, datetime.datetime], dt2: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断两个时间是否为同一天。

参数:
  • dt1 – 第一个时间。

  • dt2 – 第二个时间。

返回:

是否为同一天。

static is_same_time(dt1: Union[hutool.core.date.DateTime, datetime.datetime], dt2: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断两个时间是否为同一时刻。

参数:
  • dt1 – 第一个时间。

  • dt2 – 第二个时间。

返回:

是否为同一时刻。

static is_in(dt: Union[hutool.core.date.DateTime, datetime.datetime], start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断时间是否在指定范围内 [start, end](含边界)。

参数:
  • dt – 待判断的时间。

  • start – 范围起始时间。

  • end – 范围结束时间。

返回:

是否在范围内。

static is_leap_year(year: int) bool

判断是否为闰年。

参数:

year – 年份。

返回:

是否为闰年。

static timer() int

返回当前毫秒时间戳(用于计时)。

返回:

当前毫秒时间戳。

static spend_ms(pre_time: int) int

计算从 pre_time 到当前的毫秒差。

参数:

pre_time – 之前记录的毫秒时间戳(通过 timer() 获取)。

返回:

经过的毫秒数。

static date_trunc(trunc_type: str, dt: Union[datetime.datetime, datetime.date]) Union[datetime.datetime, datetime.date]

截断日期到指定精度。

受 PostgreSQL 的 date_trunc 函数启发。 支持的截断类型:yearquartermonthweekdayhourminutesecond

参数:
  • trunc_type – 截断类型

  • dt – 日期或日期时间对象

返回:

截断后的日期/日期时间对象(类型与输入一致)

抛出:

ValueError – 不支持的截断类型时

static get_week(dt: Union[datetime.datetime, datetime.date])

获取日期所在年周号。

返回 (week_number, year) 元组,其中 week_number 为周号, year 为该周所属的年份(跨年时可能与 dt.year 不同)。

参数:

dt – 日期或日期时间对象

返回:

(week_number, year) 元组

static get_monthspan(dt: Union[datetime.datetime, datetime.date])

获取日期所在月的首日和末日。

参数:

dt – 日期或日期时间对象

返回:

(首日, 末日) 元组,类型与输入一致

static get_weekspan(dt: Union[datetime.datetime, datetime.date])

获取日期所在周的周一和周日。

参数:

dt – 日期或日期时间对象

返回:

(周一, 周日) 元组,类型与输入一致

static get_quarterspan(dt: Union[datetime.datetime, datetime.date])

获取日期所在季度的首日和末日。

参数:

dt – 日期或日期时间对象

返回:

(首日, 末日) 元组,类型与输入一致

static get_yearspan(dt: Union[datetime.datetime, datetime.date])

获取日期所在年的首日和末日。

参数:

dt – 日期或日期时间对象

返回:

(首日, 末日) 元组,类型与输入一致

static month_add(dt: Union[datetime.datetime, datetime.date], months: int) Union[datetime.datetime, datetime.date]

日期加减指定月数。

自动处理月末溢出(如 1月31日 + 1月 = 2月28日)。

参数:
  • dt – 日期或日期时间对象

  • months – 加减月数(正数为加,负数为减)

返回:

新的日期/日期时间对象

static rfc3339_date(dt: Optional[datetime.datetime] = None) str

格式化为 RFC 3339 日期字符串。

例如 "2024-01-15T08:30:00Z"

参数:

dt – 日期时间对象,为 None 时使用当前时间

返回:

RFC 3339 格式字符串

static rfc3339_date_parse(date_str: str) datetime.datetime

解析 RFC 3339 日期字符串为 datetime 对象。

参数:

date_str – RFC 3339 格式字符串,如 "2024-01-15T08:30:00Z"

返回:

datetime 对象

抛出:

ValueError – 格式不合法时

static rfc2616_date(dt: Optional[datetime.datetime] = None) str

格式化为 RFC 2616 (HTTP) 日期字符串。

例如 "Mon, 15 Jan 2024 08:30:00 GMT"

参数:

dt – 日期时间对象,为 None 时使用当前时间

返回:

RFC 2616 格式字符串

static rfc2616_date_parse(date_str: str) datetime.datetime

解析 RFC 2616 (HTTP) 日期字符串为 datetime 对象。

参数:

date_str – RFC 2616 格式字符串

返回:

datetime 对象

抛出:

ValueError – 格式不合法时

static age_by_birthday(birthday: Union[str, datetime.date, datetime.datetime]) int

根据生日计算年龄。

参数:

birthday – 生日,支持 str(YYYY-MM-DDYYYYMMDD)、date、datetime

返回:

年龄(周岁)

抛出:

ValueError – 无法解析生日时

static is_same_month(dt1: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], dt2: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) bool

判断两个日期是否在同一月(同年同月)。

参数:
  • dt1 – 第一个日期

  • dt2 – 第二个日期

返回:

是否在同一月

static is_same_week(dt1: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], dt2: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) bool

判断两个日期是否在同一周(ISO 周,周一为一周起始)。

参数:
  • dt1 – 第一个日期

  • dt2 – 第二个日期

返回:

是否在同一周

static time_ago(timestamp: Union[int, float]) str

将时间戳转换为人类可读的相对时间描述。

例如 "3天前""2小时前"

参数:

timestamp – Unix 时间戳(秒级)

返回:

中文相对时间描述

>>> DateUtil.time_ago(time.time())     # 刚刚
'刚刚'
static iso_timestamp() str

获取当前 ISO 8601 格式的时间戳字符串。

格式为 YYYY-MM-DDTHH:MM:SS.mmmZ

返回:

ISO 8601 时间戳字符串

>>> DateUtil.iso_timestamp()  
'2024-01-01T12:00:00.000Z'
static convert_to_date(value) Optional[datetime.date]

将各种日期格式统一转换为 date 对象。

支持:datetimedatestr``(ISO 格式或 ``YYYYMMDD)。

参数:

value – 待转换的值

返回:

date 对象,输入为 None/空时返回 None

抛出:

ValueError – 无法识别的格式时

static convert_to_datetime(value) Optional[datetime.datetime]

将各种日期格式统一转换为 datetime 对象。

支持:datetimedatestr (多种 ISO 格式)。

参数:

value – 待转换的值

返回:

datetime 对象,输入为 None/空时返回 None

抛出:

ValueError – 无法识别的格式时

static is_last_day_of_month(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) bool

判断是否为当月最后一天。

参数:

dt – 日期

返回:

是否月末最后一天

static is_expired(check_date: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], begin: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) bool

判断日期是否在有效期外(早于 begin 或晚于 end)。

参数:
  • check_date – 待检查的日期

  • begin – 有效期开始(含)

  • end – 有效期结束(含)

返回:

是否过期

static is_overlap(begin1: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end1: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], begin2: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end2: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) bool

判断两个时间段是否重叠。

参数:
  • begin1 – 第一段开始

  • end1 – 第一段结束

  • begin2 – 第二段开始

  • end2 – 第二段结束

返回:

是否重叠

static is_between(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], begin: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) bool

判断日期是否在范围内(含边界)。

参数:
  • dt – 待检查的日期

  • begin – 开始(含)

  • end – 结束(含)

返回:

是否在范围内

static day_of_year(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) int

获取年内第几天(1~366)。

参数:

dt – 日期

返回:

年内第几天

static length_of_month(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) int

获取当月天数。

参数:

dt – 日期

返回:

当月天数

static length_of_year(year: int) int

获取当年天数。

参数:

year – 年份

返回:

当年天数(365 或 366)

static millisecond(dt: Union[hutool.core.date.DateTime, datetime.datetime]) int

获取毫秒部分。

参数:

dt – 日期时间

返回:

毫秒数

static get_zodiac(month: int, day: int) str

获取星座。

参数:
  • month – 月份(1-12)

  • day – 日期(1-31)

返回:

星座名称

static get_chinese_zodiac(year: int) str

获取生肖。

参数:

year – 年份

返回:

生肖名称

static compare(d1: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date, None], d2: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date, None]) int

null-safe 的日期比较。

参数:
  • d1 – 日期1

  • d2 – 日期2

返回:

负数/0/正数

static convert_timezone(dt: Union[hutool.core.date.DateTime, datetime.datetime], from_tz: str, to_tz: str) datetime.datetime

时区转换。

参数:
  • dt – 日期时间

  • from_tz – 源时区,如 “Asia/Shanghai”

  • to_tz – 目标时区,如 “US/Eastern”

返回:

转换后的 datetime

static format_chinese_date(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) str

中文日期格式,如 “2024年1月15日”。

参数:

dt – 日期

返回:

中文日期字符串

static _to_pendulum(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date])

内部辅助:转为 pendulum 对象。

static this_year() int

获取当前年份。

返回:

当前年份

static this_month() int

获取当前月份(1~12)。

返回:

当前月份

static this_week_of_year() int

获取当前是本年第几周。

返回:

周数

static this_week_of_month() int

获取当前是本月第几周。

返回:

周数

static this_day_of_month() int

获取当前是本月第几天。

返回:

天数

static this_day_of_week() int

获取当前是本周第几天(1=周一,7=周日)。

返回:

天数

static this_hour() int

获取当前小时(0~23)。

返回:

小时

static this_minute() int

获取当前分钟(0~59)。

返回:

分钟

static this_second() int

获取当前秒(0~59)。

返回:

static this_millisecond() int

获取当前毫秒(0~999)。

返回:

毫秒

static time_to_second(time_str: str) int

将 HH:mm:ss 格式的时间字符串转为秒数。

参数:

time_str – 时间字符串,如 “01:30:00”

返回:

总秒数

static second_to_time(seconds: int) str

将秒数转为 HH:mm:ss 格式。

参数:

seconds – 总秒数

返回:

HH:mm:ss 格式字符串

static age_of_now(birth: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date, str]) int

计算到当前时间的年龄。

参数:

birth – 出生日期

返回:

年龄

static age(birth: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], now: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) int

计算两个日期之间的年龄。

参数:
  • birth – 出生日期

  • now – 当前日期

返回:

年龄

static truncate(dt: Union[hutool.core.date.DateTime, datetime.datetime], field: str = 'day') datetime.datetime

截断日期时间到指定字段。

参数:
  • dt – 日期时间

  • field – 截断字段,支持 “year”, “month”, “day”, “hour”, “minute”, “second”

返回:

截断后的 datetime

static range_contains(start: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], dt: Union[hutool.core.date.DateTime, datetime.datetime]) bool

判断日期是否在范围内(含边界)。

参数:
  • start – 起始日期

  • end – 结束日期

  • dt – 待判断日期

返回:

是否在范围内

static year_and_quarter(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) str

返回年份和季度,如 “20241” 表示 2024 年第 1 季度。

参数:

dt – 日期

返回:

年份+季度字符串

static create_stop_watch(name: str = '') hutool.core.text.StopWatch

创建秒表计时器。

参数:

name – 秒表名称

返回:

StopWatch 实例

static nanos_to_millis(nanos: int) float

纳秒转毫秒。

参数:

nanos – 纳秒

返回:

毫秒

static nanos_to_seconds(nanos: int) float

纳秒转秒。

参数:

nanos – 纳秒

返回:

static format_between_ms(between_ms: int, level: str = 'millisecond') str

格式化时间间隔(毫秒)。

参数:
  • between_ms – 毫秒间隔

  • level – 精度级别,”day”, “hour”, “minute”, “second”, “millisecond”

返回:

格式化后的间隔字符串

static format_local_datetime(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime, None] = None) str

格式化为本地日期时间字符串 “YYYY-MM-DD HH:mm:ss”。

参数:

dt – 日期时间,默认当前时间

返回:

格式化字符串

static parse_local_datetime(s: str) datetime.datetime

解析本地日期时间字符串 “YYYY-MM-DD HH:mm:ss”。

参数:

s – 日期时间字符串

返回:

datetime 对象

static parse_utc(s: str) datetime.datetime

解析 UTC 日期时间字符串。

参数:

s – UTC 日期时间字符串,如 “2024-01-15T10:30:00Z”

返回:

datetime 对象

static parse_cst(s: str) datetime.datetime

解析 CST(中国标准时间 UTC+8)日期时间字符串。

参数:

s – CST 日期时间字符串

返回:

datetime 对象(已转换为本地时间)

static parse_rfc2822(s: str) datetime.datetime

解析 RFC 2822 日期字符串,如 ‘Mon, 15 Jan 2024 10:30:00 +0800’。

参数:

s – RFC 2822 日期字符串

返回:

datetime 对象

static round(dt: Union[hutool.core.date.DateTime, datetime.datetime], field: str = 'day') datetime.datetime

四舍五入日期时间到指定字段。

超过字段中间值时向上舍入,否则截断。 例如 round(dt, “hour”) 在分钟 >= 30 时进位。

参数:
  • dt – 日期时间

  • field – 舍入字段,支持 “year”, “month”, “day”, “hour”, “minute”

返回:

舍入后的 datetime

static ceiling(dt: Union[hutool.core.date.DateTime, datetime.datetime], field: str = 'day') datetime.datetime

天花板舍入(向上取整)日期时间到指定字段。

如果已经是截断值则不变,否则向上进位。

参数:
  • dt – 日期时间

  • field – 字段,支持 “year”, “month”, “day”, “hour”, “minute”, “second”

返回:

天花板后的 datetime

static begin_of_second(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime, None] = None) datetime.datetime

获取秒的开始(毫秒归零)。

参数:

dt – 日期时间

返回:

秒开始的 datetime

static end_of_second(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime, None] = None) datetime.datetime

获取秒的结束(毫秒设为最大值)。

参数:

dt – 日期时间

返回:

秒结束的 datetime

static begin_of_hour(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime, None] = None) datetime.datetime

获取小时的开始。

参数:

dt – 日期时间

返回:

小时开始的 datetime

static end_of_hour(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime, None] = None) datetime.datetime

获取小时的结束。

参数:

dt – 日期时间

返回:

小时结束的 datetime

static begin_of_minute(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime, None] = None) datetime.datetime

获取分钟的开始。

参数:

dt – 日期时间

返回:

分钟开始的 datetime

static end_of_minute(dt: Union[hutool.core.date.DateTime, datetime.datetime, pendulum.DateTime, None] = None) datetime.datetime

获取分钟的结束。

参数:

dt – 日期时间

返回:

分钟结束的 datetime

static offset(dt: Union[hutool.core.date.DateTime, datetime.datetime], field: str, amount: int) datetime.datetime

通用日期偏移。

参数:
  • dt – 日期时间

  • field – 偏移字段,支持 “year”, “month”, “week”, “day”, “hour”, “minute”, “second”

  • amount – 偏移量(正数向未来,负数向过去)

返回:

偏移后的 datetime

static range(start: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], unit: str = 'day') List[datetime.datetime]

生成日期范围列表。

参数:
  • start – 起始日期

  • end – 结束日期(不含)

  • unit – 步进单位,”day”, “week”, “month”

返回:

日期列表

static range_to_list(start: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], unit: str = 'day') List[datetime.datetime]

生成日期范围列表(含结束日期)。

参数:
  • start – 起始日期

  • end – 结束日期(含)

  • unit – 步进单位,”day”, “week”, “month”

返回:

日期列表

static week_of_month(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) int

获取指定日期在当月的第几周(从 1 开始)。

参数:

dt – 日期

返回:

月内周序号(1-based)

static get_last_day_of_month(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) int

获取指定日期所在月的最后一天(28/29/30/31)。

参数:

dt – 日期

返回:

月末日

static new_simple_format(pattern: str)

创建一个简单日期格式化函数。

返回一个可调用对象,接受 datetime 并输出格式化字符串。

参数:

pattern – 日期格式模式(如 “yyyy-MM-dd”)

返回:

格式化可调用对象

备注

Java SimpleDateFormat 模式会自动转换为 Python strftime 格式。

static offset_millisecond(dt: Union[hutool.core.date.DateTime, datetime.datetime], n: int) hutool.core.date.DateTime

偏移毫秒。

参数:
  • dt – 日期时间

  • n – 毫秒数(正数向未来偏移,负数向过去偏移)

返回:

偏移后的 DateTime

static parse_time_today(time_str: str, fmt: str = '%H:%M:%S') hutool.core.date.DateTime

解析时间字符串,日期取今日。

例如 "12:30:00" → 今日 12:30:00。

参数:
  • time_str – 时间字符串

  • fmt – 格式,默认 “%H:%M:%S”

返回:

DateTime(今日 + 指定时间)

static range_func(start: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], unit: str = 'day') Generator[datetime.datetime, None, None]

生成日期范围生成器(不含结束日期)。

参数:
  • start – 起始日期

  • end – 结束日期(不含)

  • unit – 步进单位,”day”, “week”, “month”

返回:

日期生成器

static range_consume(start: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], end: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date], unit: str = 'day', consumer: Optional[Callable[[datetime.datetime], None]] = None) List[datetime.datetime]

遍历日期范围并消费(回调)。

参数:
  • start – 起始日期

  • end – 结束日期(不含)

  • unit – 步进单位

  • consumer – 回调函数(每步调用一次)

返回:

日期列表

static range_not_contains(range1: Tuple[Union[hutool.core.date.DateTime, datetime.datetime], Union[hutool.core.date.DateTime, datetime.datetime]], range2: Tuple[Union[hutool.core.date.DateTime, datetime.datetime], Union[hutool.core.date.DateTime, datetime.datetime]]) bool

判断两个日期范围是否不相交。

参数:
  • range1 – 第一个范围 (start, end)

  • range2 – 第二个范围 (start, end)

返回:

是否不相交

static spend_nt(start_time: int) int

计时,返回从 start_time 到当前时间的毫秒差。

参数:

start_time – 起始时间戳(纳秒级,由 time.perf_counter_ns() 获得)

返回:

经过的毫秒数

static to_int_second(dt: Union[hutool.core.date.DateTime, datetime.datetime, datetime.date]) int

将日期转换为秒级时间戳。

参数:

dt – 日期时间

返回:

秒级时间戳

static format_http_date(dt: Optional[datetime.datetime] = None) str

格式化为 HTTP 日期字符串(RFC 7231 / RFC 2616)。

例如 "Mon, 16 Jun 2026 12:00:00 GMT"

参数:

dt – 日期时间,默认当前时间

返回:

HTTP 日期字符串

static format_between_enhanced(begin: Union[hutool.core.date.DateTime, datetime.datetime], end: Union[hutool.core.date.DateTime, datetime.datetime], level: str = 'millisecond') str

格式化两个日期之间的间隔。

增强版 format_between,支持更多级别。

参数:
  • begin – 起始时间

  • end – 结束时间

  • level – 精度级别(”millisecond”/”second”/”minute”/”hour”/”day”)

返回:

格式化的时间间隔字符串

static convert_timezone_enhanced(dt: Union[hutool.core.date.DateTime, datetime.datetime], from_tz: str, to_tz: str) datetime.datetime

时区转换(增强版,支持字符串时区名和 ZoneInfo)。

参数:
  • dt – 日期时间

  • from_tz – 源时区

  • to_tz – 目标时区

返回:

转换后的 datetime

static today_date() datetime.date

获取今日 date 对象。

today()``(返回字符串)不同,本方法返回 ``date 对象。

返回:

今日 date 对象

static yesterday_date() datetime.date

获取昨日 date 对象。

返回:

昨日 date 对象

static tomorrow_date() datetime.date

获取明日 date 对象。

返回:

明日 date 对象

static week_start(dt: Optional[Union[datetime.datetime, datetime.date]] = None) datetime.date

获取本周一日期。

参数:

dt – 参考日期,默认为今日

返回:

本周一 date 对象

static week_end(dt: Optional[Union[datetime.datetime, datetime.date]] = None) datetime.date

获取本周日日期。

参数:

dt – 参考日期,默认为今日

返回:

本周日 date 对象

static day_start(dt: Optional[Union[datetime.datetime, datetime.date]] = None) datetime.datetime

获取当天 00:00:00。

参数:

dt – 参考日期,默认为今日

返回:

当天 00:00:00 的 datetime 对象

static day_end(dt: Optional[Union[datetime.datetime, datetime.date]] = None) datetime.datetime

获取当天 23:59:59.999999。

参数:

dt – 参考日期,默认为今日

返回:

当天 23:59:59.999999 的 datetime 对象

static month_start(dt: Optional[Union[datetime.datetime, datetime.date]] = None) datetime.date

获取本月第一天。

参数:

dt – 参考日期,默认为今日

返回:

本月第一天 date 对象

static month_end(dt: Optional[Union[datetime.datetime, datetime.date]] = None) datetime.date

获取本月最后一天。

参数:

dt – 参考日期,默认为今日

返回:

本月最后一天 date 对象

static is_between_dates(dt: Union[datetime.datetime, datetime.date], start: Union[datetime.datetime, datetime.date], end: Union[datetime.datetime, datetime.date]) bool

判断日期是否在两个日期之间(含边界)。

参数:
  • dt – 待判断的日期

  • start – 起始日期

  • end – 结束日期

返回:

是否在范围内

static get_weekday_name(dt: Optional[Union[datetime.datetime, datetime.date]] = None, locale: str = 'zh_CN') str

获取星期几的名称。

参数:
  • dt – 日期,默认为今日

  • locale – 语言区域,默认 zh_CN

返回:

星期几的名称

static get_month_name(dt: Optional[Union[datetime.datetime, datetime.date]] = None, locale: str = 'zh_CN') str

获取月份名称。

参数:
  • dt – 日期,默认为今日

  • locale – 语言区域,默认 zh_CN

返回:

月份名称

static get_tertial(dt: Optional[Union[datetime.datetime, datetime.date]] = None) int

获取日期所在三期(每期 4 个月,1-3)。

  • 1-4 月 → 1

  • 5-8 月 → 2

  • 9-12 月 → 3

参数:

dt – 日期,默认为今日

返回:

三期序号(1-3)

static tertial_add(dt: Union[datetime.datetime, datetime.date], tertials: int) Union[datetime.datetime, datetime.date]

日期加减 N 个三期(每期 4 个月)。

参数:
  • dt – 起始日期

  • tertials – 三期数(可为负数)

返回:

目标日期

static get_tertial_span(dt: Optional[Union[datetime.datetime, datetime.date]] = None) tuple

获取三期的起止日期。

参数:

dt – 日期,默认为今日

返回:

(起始月第一天, 结束月最后一天) 元组

static group_by_day(data: List[tuple]) Dict[datetime.date, list]

按日分组聚合 [(datetime, value), ...]

参数:

data – 日期-值对列表

返回:

按日分组的字典

static group_by_week(data: List[tuple]) Dict[tuple, list]

按周分组聚合 [(datetime, value), ...]

键为 (年, 周序号) 元组。

参数:

data – 日期-值对列表

返回:

按周分组的字典

static group_by_month(data: List[tuple]) Dict[tuple, list]

按月分组聚合 [(datetime, value), ...]

键为 (年, 月) 元组。

参数:

data – 日期-值对列表

返回:

按月分组的字典

static group_by_quarter(data: List[tuple]) Dict[tuple, list]

按季度分组聚合 [(datetime, value), ...]

键为 (年, 季度) 元组,季度为 1-4。

参数:

data – 日期-值对列表

返回:

按季度分组的字典

static group_by_year(data: List[tuple]) Dict[int, list]

按年分组聚合 [(datetime, value), ...]

参数:

data – 日期-值对列表

返回:

按年分组的字典

static parse_natural(date_string: str) datetime.datetime

解析自然语言日期字符串。

支持三种格式:

  1. 标准日期时间:"2024-01-15 12:30:00"

  2. 关键字 "now":返回当前时间

  3. 相对时间增量:基于当前时间偏移,格式为 +/-N{unit} 的组合

支持的增量单位:

  • y — 年(按 365.24 天折算)

  • M — 月(按 30.42 天折算)

  • w — 周

  • d — 天

  • h — 小时

  • m — 分钟

  • s — 秒

参数:

date_string – 日期字符串

返回:

datetime 对象

抛出:

ValueError – 无法解析时

>>> DateUtil.parse_natural("now")                          # 当前时间
>>> DateUtil.parse_natural("2024-01-15 12:30:00")          # 标准格式
>>> DateUtil.parse_natural("+1d")                          # 明天此时
>>> DateUtil.parse_natural("-2h+30m")                      # 2小时30分前
>>> DateUtil.parse_natural("+1y-3M+5d")                    # 1年3月后减5天