开发者

Python使用Pendulum优雅处理日期与时间

目录
  • 一、为什么选择 Pendulum
  • 二、安装 Pendulum
  • 三、核心功能与语法解析
    • 3.1 获取当前时间
    • 3.2 创建时间对象
    • 3.3 自然语言解析时间
    • 3.4 时间加减(Duration)
    • 3.5 时间比较
    • 3.6 时区处理
    • 3.7 格式化与字符串转换
    • 3.8 持续时间(Durations)
  • 四、日期区间与范围处理
    • 五、与 datetime 的兼容性
      • 六、典型应用场景
        • 6.1 多时区日程应用
        • 6.2 自动任务触发器
        • 6.3 数据报表日期范围
        • 6.4 人类可读的时间间隔(humanize)
      • 七、与其他时间库对比
        • 八、总结

          在日常开发中,日期和时间的处理一直是让人头疼的事情。虽然 python 内置的 datetime 模块功能强大,但使用起来冗长、容易出错,对时区支持也不够友好。而 pendulum 正是为了解决这些痛点而生的现代化日期时间库。

          本文将全面介绍 pendulum 的特点、用法以及典型应用场景,并与 datetime 模块进行对比,帮助你在实际项目中优雅地处理时间逻辑。

          一、为什么选择 Pendulum

          在你接触 pendulum 之前,可能已经习惯于这样写代码:

          from datetime import datetime, timedelta, timezone
          
          now = datetime.now()
          later = now + tim编程客栈edelta(days=3)
          

          然而,如果你需要处理时区转换、自然语言式时间表达、日期范围、持续时间等需求时,datetime 的语法就显得冗长而繁琐。

          而使用 pendulum,代码变成这样:

          import pendulum
          
          now = pendulum.now("Asia/Shanghai")
          later = now.add(days=3)
          

          是不是清晰不少?

          二、安装 Pendulum

          Pendulum 可以通过 pip 快速安装:

          pip install pendulum
          

          安装完成后,导入方式非常简单:

          import pendulum
          

          三、核心功能与语法解析

          3.1 获取当前时间

          pendulum.now()                         # 使用本地时区
          pendulum.now("UTC")                   # 使用指定时区
          pendulum.today("Asia/Shanghai")       # 获取今天0点
          pendulum.yesterday("Asia/Shanghai")   # 获取昨天
          pendulum.tomorrow("Asia/Shanghai")    # 获取明天
          

          3.2 创建时间对象

          dt = pendulum.datetime(2025, 6, 4, 15, 30, tz="Asia/Shanghai")
          

          相比原生 datetime.datetime,pendulum.datetime 支持直接指定时区字符串,无需手动构造 timezone 对象。

          还可以通过 from_format 快速解析:

          dt = pendulum.from_format("2025-06-04 15:30", "YYYY-MM-DD HH:mm", tz="Asia/Shanghai")
          

          3.3 自然语言解析时间

          pendulum.parse("2025-06-04T15:30:00+08:00")
          pendulum.parse("2025-06-04 15:30:00", tz="Asia/Shanghai")
          

          3.4 时间加减(Duration)

          now = pendulum.now()
          three_days_later = now.add(days=3)
          one_week_ago = now.subtract(weeks=1)
          

          甚至可以链式调用:

          now.add(days=1).subtract(hours=2)
          

          3.5 时间比较

          dt1 = pendulum.datetime(2025, 6, 1)
          dt2 = pendulum.datetime(2025, 6, 4)
          
          print(dt1 < dt2)               # True
          pri编程nt(dt1.diff(dt2).in_days())  # 3
          

          支持 .is_before()、.is_after()、.is_same_day() 等方法。

          3.6 时区处理

          dt = pendulum.datetime(2025, 6, 4, 15, 30, tz="UTC")
          local_dt = dt.in_timezone("Asia/Shanghai")
          

          还可以轻松获取所有时区:

          pendulum.timezones  # 返回所有支持的时区列表
          

          3.7 格式化与字符串转换

          now = pendulum.now()
          print(now.to_datetime_string())       # "2025-06-04 15:30:00"
          print(now.format("YYYY-MM-DD HH:mm"))  # "2025-06-04 15:30"
          

          支持使用 moment.js 的格式化语法,非常自然。

          3.8 持续时间(Durations)

          duration = pendulum.duration(days=2, hours=5, minutes=30)
          print(duration.total_minutes())  # 2*24*60 + 5*60 + 30 = 3090
          

          你也可以对时间进行差值计算:

          start = pendulum.datetime(2025, 6, 1)
          end = pendulum.datetime(2025, 6, 4)
          diff = end - start
          print(diff.in_days())  # 3
          

          四、日期区间与范围处理

          处理时间段是数据分析、报表等任务的常见需求。pendulum 提供 period 和 intervals 工具:

          start = pendulum.datetime(2025, 6, 1)
          end = pendulum.datetime(2025, 6, 10)
          period = pendulum.period(start, end)
          
          for dt in period.range("days"):
              print(dt.to_date_string())
          

          还可以使用:

          period.days         # 获取所有日期组成的列表
          period.includes(pendulum.datetime(2025, 6, 4))  # 判断某个时间是否在范围内
          

          五、与 datetime 的兼容性

          pendulum 是 datetime 的完全替代品,它继承了 datetime.dat编程客栈etime,并向下兼容所有用法。

          from datetime import datetime
          import pendulum
          
          dt = pendulum.now()
          isinstance(dt, datetime)  # True
          

          这意味着你可以在现有项目中逐步替换 datekAqJFFtime 为 pendulum,无需大改动。

          六、典型应用场景

          6.1 多时区日程应用

          event_time = pendulum.parse("2025-06-04 18:00", tz="America/New_York")
          user_time = event_time.in_timezone("Asia/Shanghai")
          print(user_time.format("YYYY-MM-DD HH:mm"))
          

          6.2 自动任务触发器

          now = pendulum.now()
          if now.is_weekday() and now.hour == 9:
              print("开始执行每日工作任务")
          

          6.3 数据报表日期范围

          start = pendulum.today().subtract(days=6)
          end = pendulum.today()
          
          for day in pendulum.period(start, end).range("days"):
              print(f"处理报表:{day.to_date_string()}")
          

          6.4 人类可读的时间间隔(humanize)

          dt = pendulum.now().subtract(days=2, hours=3)
          print(dt.diff_for_humans())  # “2 days ago”
          

          支持中英文,编程客栈适合用于日志、用户提示信息等。

          七、与其他时间库对比

          特性datetimearrowpendulum
          原生支持时区✅(强)
          人性化输出✅(更好)
          日期范围处理
          国际化支持✅(多语言)
          与原生兼容性
          安装包体积

          pendulum 结合了 arrow 的易用性和 datetime 的兼容性,是目前处理时间的最佳选择之一。

          八、总结

          pendulum 是一个现代化、直观且功能丰富的 Python 时间处理库。无论你是开发金融系统、定时任务调度、日志系统,还是需要处理复杂的时间逻辑,pendulum 都能大大简化你的代码。

          推荐理由总结:

          • API 更加直观
          • 对时区支持优秀
          • 支持日期范围
          • 高度兼容 datetime
          • 支持人类可读输出
          • 性能优于 arrow

          如果你还在用 datetime 并苦于写一堆格式转换、手动处理时区和计算间隔,不妨从下一个项目开始试试 pendulum,相信你会爱上它。

          到此这篇关于Python使用Pendulum优雅处理日期与时间的文章就介绍到这了,更多相关Python Pendulum处理日期与时间内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜