Python轮子: 日期、时间库汇总

原文链接:http://www.juzicode.com/python-module-date-time

1. python-dateutil

功能:扩展 Python 标准库的 datetime 模块,支持自然语言解析、相对时间计算、时区处理等。

特点

  • 支持解析多种日期格式
  • 提供相对时间计算(如 relativedelta
  • 支持时区处理

实例

#juzicode.com/VX公众号:juzicode
from dateutil import parser
from dateutil.relativedelta import relativedelta
from datetime import datetime

date = parser.parse("2023-10-05 14:30:00")
print(date)  # 输出: 2023-10-05 14:30:00

now = datetime.now()
next_month = now + relativedelta(months=+1)
print(next_month)

2. pytz

功能:提供时区支持,处理带时区的 datetime 对象。

特点

  • 包含全球时区数据库
  • 与 Python 标准库的 datetime 模块兼容

实例

#juzicode.com/VX公众号:juzicode
from datetime import datetime
import pytz

utc_time = datetime.now(pytz.UTC)
print(utc_time)

shanghai_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(shanghai_time)

3. arrow

功能:简化日期时间操作和格式化。

特点

  • 提供简洁的 API
  • 支持自然语言解析

实例

#juzicode.com/VX公众号:juzicode
import arrow

now = arrow.now()
print(now)

utc_time = now.to('UTC')
print(utc_time)

4. dateparser

功能:解析自然语言中的日期时间字符串。

特点

  • 支持多种语言
  • 解析模糊日期(如 “tomorrow at noon”)

实例

#juzicode.com/VX公众号:juzicode
import dateparser

date = dateparser.parse("tomorrow at noon")
print(date)

5. delorean

功能:时区处理和日期时间操作。

特点

  • 基于 pytzdateutil
  • 简洁的时区转换

实例

#juzicode.com/VX公众号:juzicode
from delorean import Delorean

now = Delorean()
print(now)

utc_time = now.shift('UTC')
print(utc_time)

6. moment

功能:轻量级日期时间操作(类似 JavaScript 的 moment.js)。

特点

  • 自然语言解析
  • 简单的时间加减

实例

#juzicode.com/VX公众号:juzicode
import moment

date = moment.date("tomorrow at noon")
print(date)

7. times

功能:专注于时间戳操作。

特点

  • 时间戳解析和格式化
  • 简单的时间戳计算

实例

#juzicode.com/VX公众号:juzicode
import times

timestamp = times.now()
print(timestamp)

8. croniter

功能:解析和计算 cron 表达式。

特点

  • 支持 cron 表达式解析
  • 计算下一次运行时间

实例

#juzicode.com/VX公众号:juzicode
from croniter import croniter
from datetime import datetime

cron = croniter("0 12 * * *", datetime.now())
next_run = cron.get_next(datetime)
print(next_run)

9. business-calendar

功能:处理工作日和假期。

特点

  • 自定义工作日历
  • 计算工作日差异

实例

#juzicode.com/VX公众号:juzicode
from business_calendar import Calendar
from datetime import datetime, timedelta

cal = Calendar()
start_date = datetime(2023, 10, 1)
end_date = start_date + timedelta(days=10)
workdays = cal.busdaycount(start_date, end_date)
print(workdays)

10. workalendar

功能:处理全球工作日和假期。

特点

  • 支持多国假期规则
  • 计算工作日间隔

实例

#juzicode.com/VX公众号:juzicode
from workalendar.asia import China
from datetime import datetime

cal = China()
start_date = datetime(2023, 10, 1)
end_date = datetime(2023, 10, 10)
workdays = cal.get_working_days_delta(start_date, end_date)
print(workdays)

总结

库名主要用途特点
python-dateutil扩展 datetime 功能自然语言解析、相对时间计算
pytz时区处理全球时区数据库
arrow简化日期操作人性化 API、时区转换
dateparser自然语言解析多语言支持
delorean时区转换简洁 API
moment轻量级操作类似 moment.js
times时间戳处理时间戳解析/格式化
croniterCron 表达式解析计算下次运行时间
business-calendar工作日计算自定义假期
workalendar全球工作日历多国假期支持

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注