Pendulum 入门指南:基于原生 datetime 的 Python 日期时间处理增强库
后端【免费下载链接】pendulumPython datetimes made easy项目地址https://gitcode.com/gh_mirrors/pe/pendulum点击查看免费下载Pendulum 是一个旨在简化 Python 日期时间datetime操作的第三方库。它以标准库datetime为根基提供可直接替换原生类的DateTime、Date、Time、Duration、Interval等类型并重点解决了时区处理、跨时区比较与时间差计算等常见痛点。读完本文你将掌握 Pendulum 的核心设计drop-in 替换与继承关系、其基于tzinfo的时区语义、默认时区的使用规则以及用diff()进行跨时区时间差计算的实战方法。一、定位原生 datetime 的 drop-in 替换Pendulum 的核心理念在 docs/docs/introduction.md 中表述得很清楚它提供的类都是原生类的 drop-in 替换因为它们直接继承自原生类。从源码可以验证这一继承关系DateTime类定义于 src/pendulum/datetime.py声明为class DateTime(datetime.datetime, Date)即它继承自标准库的datetime.datetime因此凡是接受原生datetime对象的代码大多可以无缝传入DateTime实例顶层 API 在 src/pendulum/init.py 中统一导出DateTime、Date、Time、Duration、Interval、Timezone等类型以及datetime()、now()、local()、parse()、instance()、duration()等工厂函数。这种继承而非重写的设计意味着你可以在现有代码里逐步把datetime替换为DateTime而不必担心 API 断裂。READMEREADME.rst也明确说明Pendulum 依然依赖标准库是stilldatetimebut better——只是个别以type()判断对象类型的库如sqlite3、PyMySQL需要注册适配器这一限制的完整清单与解决方案同样记录在 README 的 Limitations 一节中。二、时区处理一切建立在 tzinfo 之上原文档强调Pendulum 在时区处理上special care has been taken且时区实现基于底层tzinfo。这意味着它不另起炉灶而是充分利用并规范化 Python 标准库的tzinfo抽象。具体表现在 src/pendulum/init.py 的_safe_timezone()辅助函数中无论是传入时区名字符串如America/Toronto、整数/浮点偏移量、zoneinfo对象通过key属性识别、pytz对象通过localize属性识别还是原生tzinfo都会被统一转换为 Pendulum 的Timezone/FixedTimezone实例。因此你可以放心混用字符串、zoneinfo.ZoneInfo与 Pendulum 自身的时区对象。围绕时区Pendulum 还提供了一组便利 APIpendulum.timezone(name)/pendulum.timezone(offset)按名称或偏移量返回时区实例src/pendulum/init.pypendulum.now(tz)获取指定时区的当前时间pendulum.local(...)与pendulum.local_timezone()获取本机时区时间pendulum.set_local_timezone(tz)/pendulum.test_local_timezone(tz)设置或临时替换本机时区后者用于测试场景。三、比较语义在 UTC 或各自时区下进行原文档给出了一个关键设计承诺所有比较都在UTC或所使用 datetime 自身的时区下进行。这与 Python 原生 datetime 的比较规则一致——比较时会先把两侧转换到 UTC 再比较从而避免只看墙上时钟导致的错误结论。测试用例可以佐证这一行为。在 tests/datetime/test_comparison.py 中构造了America/Toronto时区的DateTime与使用pendulum.timezone(America/Toronto)的原生datetime进行比较验证两者在相等、大小关系上的一致性与正确性tests/conftest.py 还展示了把测试环境的本地时区固定为America/Toronto的惯用法。四、实战示例跨时区的时间差计算原文档的核心示例展示的是跨时区diff()用法下面逐行解读 import pendulum dt_toronto pendulum.datetime(2012, 1, 1, tzAmerica/Toronto) dt_vancouver pendulum.datetime(2012, 1, 1, tzAmerica/Vancouver) print(dt_vancouver.diff(dt_toronto).in_hours()) 3这段代码的含义与结果验证构造pendulum.datetime(year, month, day, ..., tz...)按指定时区创建DateTime实例。2012 年 1 月 1 日多伦多东部时间UTC-5与温哥华太平洋时间UTC-8的墙上时间虽然同为午夜但真实时刻相差 3 小时——diff()计算的是真实时刻差而非简单的字符串差值。diff 返回 Interval查看 src/pendulum/datetime.py 可知DateTime.diff(dt, absTrue)返回一个Interval对象dt缺省时取self.now(self.tz)即当前时刻absTrue表示返回绝对值无论先后顺序结果都为正。in_hours 的换算链Interval继承自Duration见 src/pendulum/interval.py其in_hours()定义为int(self.total_hours())见 src/pendulum/duration.py而total_hours()由total_seconds() / 3600计算而来src/pendulum/duration.py因此3表示两者相差整整 3 小时。Interval 的边界检查Interval在构造时会校验起点与终点的类型一致且不允许 naive 与 aware datetime 混比src/pendulum/interval.py这从底层保证了比较语义的严谨性。类似的换算方法还包括in_minutes()、in_seconds()、total_days()、total_weeks()等以及人性化输出diff_for_humans()例如返回2 minutes ago这样的自然语言描述后者依赖 src/pendulum/locales 下的多语言资源。五、默认时区除 now() 外一律 UTC原文档最后一句是容易被忽略但影响全局的规则默认时区永远是UTC唯一的例外是now()方法。从源码可以得到双重印证顶层datetime()工厂函数的签名中tz参数默认值为UTCsrc/pendulum/init.py因此pendulum.datetime(2023, 1, 1)得到的是一个 UTC 时区的 awareDateTime相对地now()的签名是now(tzNone)src/pendulum/init.py当不传参数时返回本机本地时区的当前时间。这一设计带来两个直接后果没有裸奔的 naive datetimePendulum 去除了无时区的概念每个DateTime实例天然带时区信息README 也强调It also removes the notion of naive datetimes避免在混合比较时触发TypeError默认行为可预期当你用pendulum.datetime(...)构造时间并直接参与比较或序列化时得到的都是 UTC 语义的结果只有明确调用now()或显式传入tz时才会引入本机时区。如果你确实需要无时区的对象Pendulum 也提供pendulum.naive(year, month, day, ...)工厂函数src/pendulum/init.py作为显式的例外入口。六、快速上手安装后即可在代码中导入使用支持 Python 3.10 及以上见 README.rstimport pendulum # 默认 UTC dt pendulum.datetime(2012, 1, 1) print(dt.timezone_name) # UTC # 指定时区构造 dt_paris pendulum.datetime(2012, 1, 1, tzEurope/Paris) # 当前时间本机时区 now_local pendulum.now() # 跨时区差值 dt_toronto pendulum.datetime(2012, 1, 1, tzAmerica/Toronto) dt_vancouver pendulum.datetime(2012, 1, 1, tzAmerica/Vancouver) print(dt_vancouver.diff(dt_toronto).in_hours()) # 3 # 人性化时间差 print(pendulum.now().subtract(minutes2).diff_for_humans()) # 2 minutes ago关于更多构造方式parse字符串解析、instance原生对象转换、from_format自定义格式解析等可继续阅读仓库中的 docs/docs/instantiation.md、docs/docs/parsing.md 与 docs/docs/difference.md 等相关文档。小结Pendulum 的价值在于用标准库的规则做更顺手的 API它通过继承原生datetime实现 drop-in 替换基于tzinfo统一时区表示默认以 UTC 消除 naive 歧义并提供diff()→Interval→in_hours()这样一条直观、可验证的时间差计算链路。理解这四条设计主线你就掌握了这个库最核心的思维模型也就能在真实项目中放心地用它替代原生 datetime 处理跨时区时间逻辑。赞分享后端【免费下载链接】pendulumPython datetimes made easy项目地址https://gitcode.com/gh_mirrors/pe/pendulum点击查看免费下载相关推荐PlayIntegrityFix实战教程解决MEETS_DEVICE_INTEGRITY认证失败的5个技巧PlayIntegrityFix实战教程解决MEETS_DEVICE_INTEGRITY认证失败的5个技巧 PlayIntegrityFix是一款专为AndrInput Leap终极指南3分钟搞定跨平台键盘鼠标共享Input Leap终极指南3分钟搞定跨平台键盘鼠标共享 你是否厌倦了在办公桌上为多台电脑准备多套键盘鼠标是否经常需要在Windows、macOS和Linu桌面应用如何快速构建ESP32智能语音助手3大优势详解如何快速构建ESP32智能语音助手3大优势详解 想象一下你只需要一个简单的ESP32开发板就能打造一个能听懂你说话、能控制家电、能回答问题的AI助手小智人工智能大模型语音交互助手嵌入式物联网智能硬件MCP 服务上一篇Maccy快捷键终极备忘单打印版与电子版获取指南下一篇Gyroflow视频稳定终极指南从新手到专业的免费解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MAS 激活脚本使用指南:四种方式让 Windows 11 与 Office 摆脱“未激活“水印

MAS 激活脚本使用指南:四种方式让 Windows 11 与 Office 摆脱“未激活“水印

MAS 激活脚本使用指南:四种方式让 Windows 11 与 Office 摆脱"未激活"水印 【免费下载链接】Microsoft-Activation-Scripts Open-source Windows and Office activator featuring HWID, Ohook, TSforge, and Online KMS activation methods, along with a…

2026/10/7 9:34:24 阅读更多 →
TIL 实战:用 MySQL `SHOW TABLES LIKE` 按模式筛选表名,快速定位陌生库中的目标表

TIL 实战:用 MySQL `SHOW TABLES LIKE` 按模式筛选表名,快速定位陌生库中的目标表

文档教程知识库 【免费下载链接】til :memo: Today I Learned 项目地址: https://gitcode.com/gh_mirrors/ti/til 点击查看 免费下载 面对一个包含大量数据表且结构陌生的数据库时,盲目的 SHOW TABLES 会把全部表名一次性抛给你,很难找到目标…

2026/10/7 9:34:24 阅读更多 →
JAVAWEB校园二手平台毕设源码:部署、模块拆解与避坑指南

JAVAWEB校园二手平台毕设源码:部署、模块拆解与避坑指南

简介:面向JavaWeb课程设计及毕业设计学生的校园二手平台完整项目,覆盖用户注册登录、个人资料修改、商品信息管理、二手商品发布与分类检索等核心模块,适合作为毕设选题、课程项目或练手仿写参考。压缩包为rar格式,约29.02MB&…

2026/10/7 9:33:23 阅读更多 →

最新新闻

C# WinForm 数据库备份与恢复实战:SQL语句与文件操作两种方式详解

C# WinForm 数据库备份与恢复实战:SQL语句与文件操作两种方式详解

简介:这份资源是面向C# WinForm开发者的数据库备份与恢复实战Demo,基于VS2008实现,适合需要为桌面应用增加数据安全保障能力的初中级开发者参考。示例围绕两种主流方案展开:一是借助SQLDMO这一COM对象模型,通过SQLServ…

2026/10/7 10:04:45 阅读更多 →
hyperframes实战:用HTML和CLI批量生成MP4视频

hyperframes实战:用HTML和CLI批量生成MP4视频

1. 从“hyperframes”这个名字说起:它到底想解决什么问题第一次看到“hyperframes”这个词,我脑子里蹦出来的不是某个具体工具,而是一种感觉——它把“hyper”和“frames”拼在一起,暗示着某种“超高速的帧处理”或者“超轻量的帧…

2026/10/7 10:04:45 阅读更多 →
一句话生成爆款视频:WorkBuddy+Hypit本地工作流实战

一句话生成爆款视频:WorkBuddy+Hypit本地工作流实战

1. 项目概述:用一句话生成爆款视频,不是玄学,是工具链的精准缝合“一句话复刻爆款视频”——这句话乍看像短视频平台的流量话术,但落到实操层面,它背后是一套可拆解、可复现、可批量化的视频生成工作流。我从去年开始系…

2026/10/7 10:04:45 阅读更多 →
OpenShell:开源AI命令行助手,自然语言变可执行命令

OpenShell:开源AI命令行助手,自然语言变可执行命令

我几年前就开始折腾终端工具链,从 zsh 到 fish,从 oh-my-zsh 到各种 fancy prompt,折腾到最后发现一个尴尬的现实:无论怎么美化、补全、加插件,终端最核心的效率瓶颈一直没解决——人类的自然语言和机器的命令行之间&a…

2026/10/7 10:04:45 阅读更多 →
Spring AI ReactAgent阿里云生产落地实战

Spring AI ReactAgent阿里云生产落地实战

1. 这不是“第九掌”,而是Spring AI在阿里云生态落地的临界点“降SpringAI阿里第9掌-或跃在渊-ReactAgent”——这个标题乍看像武侠小说里的秘籍名,但如果你最近在Java后端、AIGC工程化或企业级AI应用开发一线摸爬滚打,大概率已经在这几个关键…

2026/10/7 10:04:45 阅读更多 →
【八个月网安课程】第九周·周三:目录扫描工具——Dirsearch、dirb、御剑参数配置与字典使用

【八个月网安课程】第九周·周三:目录扫描工具——Dirsearch、dirb、御剑参数配置与字典使用

以下是第九周周三学习内容的详细展开。今天你将掌握渗透测试信息收集中最基础也最关键的一环——目录扫描。通过使用 Dirsearch、dirb、御剑等工具,你能快速发现目标站点上隐藏的后台、备份文件、配置文件等敏感路径,为后续漏洞利用铺路。第九周周三&…

2026/10/7 10:03:45 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →