开源项目
persian-calendar/persian-calendar avatar
persian-calendar/persian-calendar

persian-calendar:一个为伊朗历场景设计的 Android 日历,值得你重新审视

Android 波斯日历。英语 Android 波斯日历 一个简单、免费和开源的 Android 日历 项目状态和本地化 下载 如果您的设备运行的是旧版本的 Android,请参阅此。

975 个 Star210 个 ForkKotlinGPL-3.0
GitHub

秒懂

它是什么?
persian-calendar 是一个用 Kotlin 编写的开源 Android 日历,专门处理波斯历、回历和公历的转换与显示。它解决了伊朗语用户在多历法并存环境下的日常需求,但 GPL-3.0 许可证和有限的维护节奏需要你在采用前仔细权衡。
适合谁用?
如果你的应用面向伊朗或阿富汗用户,需要可靠的波斯历转换和显示,persian-calendar 是一个经过多年迭代的候选方案。它的构建流程简单,代码库结构清晰,但 GPL-3.0 许可证意味着你修改后必须公开源码,这对商业闭源应用是硬性阻碍。
能商用吗?
可以,但有条件。GPL-3.0 是 copyleft 许可证:如果你分发包含它的软件,就必须以同一许可证公开该软件的源代码。只在内部运行、不对外分发,则不会触发这项义务。
还在维护吗?
在维护。仓库最近一次提交在 2 天前。
用什么语言写的?
主要是 Kotlin(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是伊朗语用户的历法混乱

在伊朗,日常生活使用波斯历,但国际事务、软件日期和部分宗教节日使用公历或回历。大多数 Android 系统日历只支持公历和农历,波斯历用户不得不手动换算日期。persian-calendar 正是为此而生。它提供一个完整的 Android 日历应用,支持波斯历、回历和公历的显示与转换,并附带祈祷时间、节假日等伊朗语用户关心的功能。这个项目的目标用户很明确:需要波斯历的普通用户,以及想要在自己的应用中嵌入波斯历功能的开发者。它不是通用日历库,而是一个针对特定文化场景的解决方案。

从代码库看它的实现机制

仓库使用 Kotlin 作为主要语言,这从 GitHub 的语言统计可以看出。README 没有给出架构图,但从项目结构和多年迭代的 release 记录可以推断,它包含日期转换算法、日历 UI 组件和本地化资源。日期转换是核心,波斯历与公历的换算需要精确的天文或数学算法,这个项目在长期维护中积累了这些逻辑。本地化通过 Weblate 平台进行,支持多种语言,这从 README 中的 Weblate 徽章可以确认。应用分发渠道包括 Google Play、F-Droid 和伊朗本地的 CafeBazaar、Myket,说明它针对伊朗市场做了专门适配。代码库没有提供 API 文档,所以如果你要嵌入它,需要直接阅读源码。

构建与运行:从克隆到安装

README 给出的构建步骤非常简短。在 Android Studio 中,选择 File > New > Project from Version Control,输入仓库地址 https://github.com/persian-calendar/persian-calendar,点击克隆即可。这是一个标准的 Gradle 项目,克隆后 Android Studio 会自动同步依赖。没有提到任何特殊的配置键或环境变量,这意味着构建过程相对直接。如果你要生成 release 版本,可能还需要配置签名,但 README 没有提及。值得注意的是,README 提到如果设备运行旧版 Android,需要查看 COMPATIBILITY.md,这说明项目对老设备有兼容性考虑,但具体支持的最低版本需要你查看那个文件。

GPL-3.0 许可证:一个不可忽视的约束

README 中的许可证部分明确说明项目使用 GPL-3.0,并且特别解释了原因:因为项目使用了其他 GPL 代码,所以必须继续使用 GPL。波斯语部分还给出了简化解释,要求修改后的源码在每次发布时公开,并提供链接和原始引用。这对开发者意味着,如果你基于这个项目修改或扩展,你的衍生作品也必须以 GPL-3.0 发布。这排除了闭源商业集成的可能性。如果你只是使用编译好的 APK,那不受影响,但如果你想复用其中的日期转换算法或 UI 组件,就必须接受 GPL 的传染性。这不是一个宽松的 MIT 或 Apache 许可证,所以在规划集成之前,务必咨询法律意见。

维护节奏与版本更新

从 release 记录看,v10.1.7 于 2026 年 2 月 19 日发布,v10.1.2 在 2026 年 1 月 29 日,v10.1.1 在 1 月 27 日。这说明最近几个月有活跃的更新,但两次发布之间的间隔并不均匀。项目没有标记为 archived,默认分支是 main,这暗示它仍在维护。然而,没有明确的路线图或贡献指南,README 只提供了构建步骤和下载链接。对于依赖此项目的开发者来说,这种不规律的发布节奏可能带来风险,因为安全修复或新功能不会按预期时间到来。你需要自行跟踪 release 页面。

替代方案与差异

如果你需要波斯历功能但无法接受 GPL,一个替代方案是使用 ICU4J(International Components for Unicode for Java)库。ICU4J 提供了完整的历法系统支持,包括波斯历,并且使用 Unicode 许可证,允许在闭源商业应用中使用。区别在于,ICU4J 是一个通用国际化库,你需要自己构建日历 UI,而 persian-calendar 是完整的应用,开箱即用。另一个选择是使用 Android 系统自带的 CalendarContract API,但它默认不支持波斯历,你需要手动转换日期,这增加了复杂度。所以,选择取决于你的需求:完整应用选 persian-calendar,库集成选 ICU4J,但要注意许可证差异。

谁该采用,谁该避开

这个项目适合两类人。一是伊朗语用户,他们可以直接从 F-Droid 或 CafeBazaar 安装使用,不需要关心代码。二是开源开发者,他们想在遵循 GPL 的前提下构建一个带波斯历的日历应用。不适合的人包括:闭源商业应用开发者,因为 GPL 会强制公开源码;需要频繁更新支持的团队,因为维护节奏不规律;以及只需要简单日期转换而不需要完整 UI 的开发者,因为那会引入过多依赖。在采用前,先检查 COMPATIBILITY.md 确认你的目标 Android 版本,并查看最新 release 的变更日志,确保没有未解决的严重问题。

编辑结论

如果你的应用面向伊朗或阿富汗用户,需要可靠的波斯历转换和显示,persian-calendar 是一个经过多年迭代的候选方案。它的构建流程简单,代码库结构清晰,但 GPL-3.0 许可证意味着你修改后必须公开源码,这对商业闭源应用是硬性阻碍。采用前先确认你的目标 Android 版本是否在 COMPATIBILITY.md 的支持范围内,并检查最新 release v10.1.7 的变更日志,因为项目维护节奏并不规律。如果你的需求只是公历加简单农历,或者你无法接受 GPL 传染性,那么你应该考虑其他许可证更宽松的库,比如用 ICU4J 自行实现历法转换。最终判断:persian-calendar 适合开源项目和个人开发者,不适合闭源商业产品。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记