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

Written by

in

文章目录
  • 在你接触 pendulum 之前,可能已经习惯于这样写代码: from datetime import datetime, timedelta, timezone now = datetime.now() later = now + timedelta(days=3) 然而,如果你需要处理时区转换、自然语言式时间表达、日期范围、持续时间等需求时,datetime 的语法就显得冗长而繁琐。 而使用 pendulum,代码变成这样: import pendulum now = pendulum.now(“Asia/Shanghai”) later = now.add(days=3) 是不是清晰不少?
  • Pendulum 可以通过 pip 快速安装: pip install pendulum 安装完成后,导入方式非常简单: import pendulum
  • 处理时间段是数据分析、报表等任务的常见需求。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)) # 判断某个时间是否在范围内
  • pendulum 是 datetime 的完全替代品,它继承了 datetime.datetime,并向下兼容所有用法。 from datetime import datetime import pendulum dt = pendulum.now() isinstance(dt, datetime) # True 这意味着你可以在现有项目中逐步替换 datetime 为 pendulum,无需大改动。
  • 特性 datetime arrow pendulum 原生支持时区 ❌ ✅ ✅(强) 人性化输出 ❌ ✅ ✅(更好) 日期范围处理 ❌ ✅ ✅ 国际化支持 ❌ ✅ ✅(多语言) 与原生兼容性 ✅ ❌ ✅ 安装包体积 小 中 中 pendulum 结合了 arrow 的易用性和 datetime 的兼容性,是目前处理时间的最佳选择之一。
  • pendulum 是一个现代化、直观且功能丰富的 Python 时间处理库。无论你是开发金融系统、定时任务调度、日志系统,还是需要处理复杂的时间逻辑,pendulum 都能大大简化你的代码。 推荐理由总结: API 更加直观 对时区支持优秀 支持日期范围 高度兼容 datetime 支持人类可读输出 性能优于 arrow 如果你还在用 datetime 并苦于写一堆格式转换、手动处理时区和计算间隔,不妨从下一个项目开始试试 pendulum,相信你会爱上它。 到此这篇关于Python使用Pendulum优雅处理日期与时间的文章就介绍到这了,更多相关Python Pendulum处理日期与时间内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python Pendulum进行日期时间处理的示例详解 Python最好的日期处理库pendulum的使用指南 最好的Python DateTime 库之 Pendulum 长篇解析 Python Arrow实现优雅处理日期与时间的终极指南 python 多种日期时间处理函数实例详解 Python日期时间处理库dateutil详解
  • 目录
    • 一、为什么选择 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 之前,可能已经习惯于这样写代码:

            from datetime import datetime, timedelta, timezone
            
            now = datetime.now()
            later = now + timedelta(days=3)
            

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

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

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

            是不是清晰不少?

            Pendulum 可以通过 pip 快速安装:

            pip install pendulum
            

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

            import pendulum
            

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

            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")
            

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

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

            甚至可以链式调用:

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

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

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

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

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

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

            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 的格式化语法,非常自然。

            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))  # 判断某个时间是否在范围内
            

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

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

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

            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"))
            

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

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

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

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

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

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

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

            推荐理由总结:

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

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

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

            您可能感兴趣的文章:

            • Python Pendulum进行日期时间处理的示例详解
            • Python最好的日期处理库pendulum的使用指南
            • 最好的Python DateTime 库之 Pendulum 长篇解析
            • Python Arrow实现优雅处理日期与时间的终极指南
            • python 多种日期时间处理函数实例详解
            • Python日期时间处理库dateutil详解

            站内搜索